top | item 3816868

Node-Qt: Build native apps using Node.js + Qt (Windows, Mac, Linux)

79 points| arturadib | 14 years ago |github.com | reply

26 comments

order
[+] arturadib|14 years ago|reply
Hi, OP here. For folks who prefer HTML5 APIs, I'm also working on a layer that translates these Qt APIs into HTML5 primitives (like Canvas and AudioContext):

http://news.ycombinator.com/item?id=3816870

(There are some neat demos there :))

[+] buu700|14 years ago|reply
Wait, so what Node-Qt and Node-Five would both allow you to use exactly the same code?
[+] firefoxman1|14 years ago|reply
In the sample on that page, it says:

   // Prevent objects from being GC'd
   global.app = app;
   global.window = window;
Why do you need to do that? I thought that as long as there were still references to an object, it isn't GC'd.
[+] arturadib|14 years ago|reply
Yeah it's just in case there are no surviving references to those vars. For example in the hello world code app gets GC'd unless it's in a callback in setTimeout().
[+] artyyouth|14 years ago|reply
From Qt5 "Lighthouse" would replace C++ as the main development method, and the Qt Quick language in Lighthouse is just a JavaScript extended language, IMHO, this project is just another re-invention of the wheel...

And on desktop, we already have state-of-the-art web browser Chrome, why bother using this to write HTML5 Canvas based app?

[+] iamleppert|14 years ago|reply
Nice. Last time I looked at Qt bindings for Node, it didn't support async and used the main node thread to run the UI on (OSX seems to require Qt use the main thread to draw UI on).

Care to elaborate how you got around this? I tired several different things and couldn't get it done.

[+] arturadib|14 years ago|reply
Some Qt APIs are inherently asynchronous (like QHttp) but the graphics-related ones I'm binding to are not (like QPainter).

So the situation is analogous to the DOM in web browsers. The calls are synchronous and run in the main thread. As the web has taught us though, single-threads and blocking graphics calls can go a long way :)

[+] ing33k|14 years ago|reply
God job . Will definitely give a try , as I have some experience in both of them .. I always wanted to try qt php bindings, but even running the example apps was difficult .

Thanks to NPM :)

[+] mirsadm|14 years ago|reply
This seems to describe a large portion of javascript based frameworks:

This is a list of common errors when experimenting with Node addons, and their possible solutions: "Out of memory"

[+] arturadib|14 years ago|reply
Hi, OP here. As explained that message happens when you mess something up in the C++ bindings, not because of JavaScript actually running out of memory.
[+] optymizer|14 years ago|reply
So... this allows us to run webservers that call Qt methods? Why would anyone do that?
[+] tlrobinson|14 years ago|reply
It allows you to call Qt methods from JavaScript. You don't need to run Node as a webserver.
[+] tferris|14 years ago|reply
OT but regarding the current native app hype (especially in the mobile space): I still don't like native apps except my browser, my editor, the shell and some legacy software (Office and Adobe CS). I don't like updating 30 apps a week on my Android. But it's more than a trend I guess?
[+] arturadib|14 years ago|reply
Node-Qt apps are really semi-native since the app itself is written in JavaScript. So you can easily make your app auto-updating, just like a web app. (iOS is an exception due to Apple's restrictions, unless they're OK with QtWebKit which I doubt).
[+] WayneDB|14 years ago|reply
Web apps are the hype. Native apps have always been the standard.

Your labeling of Office and Adobe CS as "legacy" is just wishful thinking.

[+] DaNmarner|14 years ago|reply
Why the dependency for Python?
[+] arturadib|14 years ago|reply
That comes from node-gyp (Node's addon build tool)
[+] vier|14 years ago|reply
it's a build dependency not a runtime dependency