QT addresses write once, build for everywhere. But a big part of the issue here is write once, deploy everywhere - which is a whole other animal. App stores make deployment - and upgrades - pretty easy, but once your app has any kind of complex database behind it, you need the kind of synchronized update everywhere that's a logistical nightmare. Like it or not, web apps rule for deployment - and deployment rules.
I've long advocated for a 'smart terminal' approach, where the 'app' is just a GUI with a set of capabilities, and all the smarts are up on the server. Something like Facebook works more or less this way. The Facebook app is just a terminal that's good at viewing scrolling lists of posts. It has some simple data input capabilities, which are used to implement commenting and searching, but the contents of your facebook feed and the mechanics of commenting and searching are done by a server application. The upside to this approach is huge. Even with the most sophisticated GUI tookits, GUI programming is tricky and hard to test. Modern GUIs let you do a lot, and have to be prepared to take all kinds of input in any order. A smart terminal lets you define exactly what interactions you're willing to support and debug them once. The applications themselves run on the server and are transactional - responding to a single input from the user, and needing only the ability to handle that case, making them extremely modular and straightforward to build and debug.
My question is whether HTML5 is an appropriate platform on which to build such a smart terminal. I built one in Win32. It's about 1MB, provides a pretty nice GUI that relies heavily on a nice spreadsheet-like grid widget I wrote. Currently, I can deploy it on Windows, Mac and Linux - because it's 'simple' enough to work well using the WINE Win32 runtime. But no such luck for mobiles. I've been pondering either direct ports to Android and iOS or a rewrite in QT to get a single codebase that works everywhere. But in the back of my mind is the thought that what I should really do is port it to HTML5 and eliminate the deployment issue entirely. But I'm not sure that a Javascript version would work as well - and truth be told, Javascript is such a different beast than Win32 or QT that I don't really know where to begin. I suspect it's possible - and if it uses websockets to interact with the backend just like the Win32 version, the apps would be none the wiser. But it'd be nice if you folks could render an opinion about whether it's advisable...