6 ms·
Show HN: Qt binding for Go with support for all major operating systems
- cridenour 9y agoHave used it and hang out in the Gophers slack channel. You provide great support and when I followed instructions it worked perfect!
- therecipe 9y agothank you :)
- educar 9y agoWhy is the -fast flag not the default for qtdeploy? Edit: er, why the downvotes for a harmless question? I was curious why a flag named fast is not the default. This question is also very much related to the project page linked.
- therecipe 9y agoqtdeploy is intended to be used for deploying and therefore will run qtrcc, qtmoc, qtminimal and do the actual bundling of your binary. the -fast flag re-uses the cached rcc_* moc_* minimal-* files and will also not re-run the actual bundling process. this works for the desktop targets but not for the mobile targets, therefore I made it optional.
- scott_karana 9y agoIn what world would "fast" mean "do things faster with no downsides"? ;) It's a trade-off between deployment speed and quality, like compiler optimizations.
- dejv 9y agoI am confused by QT licensing model. What are limitation of free QT plan used by commercial (downloadable) application?
- brcha 9y agoQt is LGPL. So there are no limitations unless you make changes to the Qt library (which you probably won't do). If you do make changes, though, then you would have to release them under LGPL license. So, I think there are absolutely no limitations to using Qt LGPL in a commercial application. All you get from the commercial license is support. Note: I'm not a lawyer, don't hang me if you get sued or something. But I do think I'm right about this.
- chrisseaton 9y ago> there are no limitations unless you make changes to the Qt library I thought you were required to allow linking to a newer or modified version of a LGPL library? So one limitation is you have to either dynamically link or provide a mechanism to relink.
- purplesinha 9y agoIANAL, but this requirement is the reason I stopped using Qt for my own projects. Those terms would seem to mean anything you write using Qt can't be deployed on a closed platform. Tons of people use LGPLd code on iOS and Android (stores like Play and Amazon) though and I think most users and developers are ignorant of the relinking requirement. I didn't want to risk it.
- rsynnott 9y agoHere's an old example of how it can (apparently; presumably according to Google's lawyers) be done for iOS: https://news.ycombinator.com/item?id=4302517 https://news.ycombinator.com/item?id=4302517 Google has now killed off Sparrow entirely, but they used to make it available for download so that an end-user could in principle re-link it, to comply with the LGPL.
- ChajusSaib 9y agoSo if I were to statically link my application but release the object files and let user's re-compile it with another version of the library then that would satisfy the LGPL license? If so I think I might be headed back to Qt.
- 01walid 9y agodumb question: will qtdeploy produce a single static binary for the whole app or is about some other sort of shared libraries deployment ?
- therecipe 9y agoit depends on the target [1] and which Qt version you use, the default "official" Qt version usually dynamically links against Qt's libs. for windows for example you can use the msys2 version (on windows), which can also be statically linked or you could use the docker images with mxe to statically link your windows application. but you could also build a static version of Qt yourself and use that version as well. https://github.com/therecipe/qt#targets https://github.com/therecipe/qt#targets
- learc83 9y agoI may be remembering wrong. But I believe back when I used Qt a few years ago, the most common interpretation of the GPL license the free version used prevented you from deploying with a single static binary.
- 01walid 9y agoOh right, almost forgot that..
- e12e 9y agoSurely, that's "prevent you from deploying with a single static binary unless under the GPL/binding offer of source code"?
- hellofunk 9y agoYou can technically deploy with a static linked Qt as long as you provide your compiled object files for download somewhere along with instructions for how to swap out the linked Qt with any other version of Qt. This keeps your code proprietary and honors the license. For example, you must deploy as a static linked Qt on the Apple App Store, but since Xcode is free and no Apple dev account is needed to install an app on your iOS device, you can provide instructions for how any user could install your binaries with any version of Qt. Unlikely any user would ever do this, but by making the process publicly known, you honor the license (and you don't need to share your own source code).
- pspeter3 9y agoDoes this require CGo?
- TheDong 9y agoYes. For example, the dbus package: https://github.com/therecipe/qt/blob/053d54a2eb0658bae6e32597a276af4245d10806/dbus/dbus.go#L5-L17 https://github.com/therecipe/qt/blob/053d54a2eb0658bae6e3259... https://github.com/therecipe/qt/blob/053d54a2eb0658bae6e32597a276af4245d10806/dbus/dbus.cpp https://github.com/therecipe/qt/blob/053d54a2eb0658bae6e3259... All of the code is cgo wrappers around messes of c/c++
- infogulch 9y agoCan gc load a cgo plugin [1]? If so, could you build therecipe/qt into a plugin and load it at runtime to avoid being forced to use cgo? E.g. your project has `type Qt interface {`, and the plugin exports a global symbol that can be asserted to that interface to use the library. [1]: https://golang.org/pkg/plugin/ https://golang.org/pkg/plugin/
- therecipe 9y agoIt could probably work, but plugins currently only work on linux.
- deleted 9y ago[deleted]
- mike_ivanov 9y agoIs the wrapper C++ code generated or hand-written?
- therecipe 9y agoit's automatically generated against the Qt version you use when you run the setup. the generator is also used to power qtmoc and qtminimal.
- mike_ivanov 9y agoI couldn't find the source code of that generator. It is not here, right? -> https://github.com/therecipe/qt/ https://github.com/therecipe/qt/
- therecipe 9y agoit's in the internal package: https://github.com/therecipe/qt/tree/master/internal/binding https://github.com/therecipe/qt/tree/master/internal/binding
- mike_ivanov 9y agoIt looks impressive. Thanks.
- mike_ivanov 9y agoTo clarify myself, I wondered if the wrapper code is generated (like here https://github.com/therecipe/qt/blob/master/websockets/websockets.cpp https://github.com/therecipe/qt/blob/master/websockets/webso...), not the moc-generated code.
- therecipe 9y agoyes, the .cpp .h and *.go files are all generated
- znpy 9y agoIs this an official package?
- therecipe 9y agono
- eberkund 9y agoDoes this work on embedded devices without desktop environment?
- therecipe 9y agoIf Qt supports it, then you can probably get it working with this binding as well.
- niccl 9y agoIS a beaglebone black sufficiently close to a raspberry pi3 that I can use the RPI3 environment for beaglebone black dev? If not, what's required to implement on a new platform?
- therecipe 9y agoI think you can't simply reuse the rpi3 env, but you can use it as a template to how to get this working for the beaglebone black. So you would need to get a cross compiler and then extract the sysroot to compile Qt on your own. After you got Qt compiled, you will also need to make some changes similar to these [1] But I think the hardest part might be to get Qt compiled for the beaglebone black, because the info I found online seems to be a bit outdated. https://github.com/therecipe/qt/pull/226/files https://github.com/therecipe/qt/pull/226/files
- eberkund 9y agohttps://doc.qt.io/qt-5/embedded-linux.html https://doc.qt.io/qt-5/embedded-linux.html
- potlee 9y agoQt is garbage. Why are people still using it?
- deleted 9y ago[deleted]
- lj3 9y agoWhat would you suggest we use instead? I believe this post was made in response to this thread[0] in which you did not comment. I am all ears if you know of something better. [0]: https://news.ycombinator.com/item?id=14066784 https://news.ycombinator.com/item?id=14066784
- gwenzek 9y agowhat are the differences with go-qml? https://github.com/go-qml/qml/blob/v1/README.md https://github.com/go-qml/qml/blob/v1/README.md
- therecipe 9y agogo-qml, like the name suggests allows you to use QML together with Go. This binding allows you to also use Qt's C++ API. And it contains some tools to simplify deployment and development processes.
- AsyncAwait 9y agoJust wanted to say, thanks for working on this! :-)
- therecipe 9y ago:)
- haidermalik12 9y agoBetter ways to write asynchronous code in Node.js http://fullstackhour.com/better-ways-to-write-asynchronous-code-in-node-js/ http://fullstackhour.com/better-ways-to-write-asynchronous-c...
- kingmanaz 9y agoI would be nice if Google put resources behind a project like this. Same with gopherjs.
- golem14 9y agoNice to see this happening. FYI, the 'examples' link on that page is broken
- homarp 9y agoit works from the README on github and goes to https://github.com/therecipe/qt/tree/master/internal/examples https://github.com/therecipe/qt/tree/master/internal/example...
- overgard 9y agoI'm a bit confused by the docker part and emphasis on deployment. Is that just for contributors/early adopters because theres no release yet, or is that just part of the flow of using this?
- therecipe 9y agoIt depends on how much you want to embrace docker. In general you can use this binding without touching docker at all. But if you want, you can use docker in every step of the process. It starts with the minimal setup that just depends on Go + Docker. Then continues during development, so if you would want for example test your application on android really quick, then you would just need to pull the android image instead of setting up the android SDK, NDK and JDK by yourself. And then in the end you can use docker for your CI and CD processes as well. For example by creating your own docker images on top of provided ones.
- farrisbris 9y agoI've been using c++/Qt for quite some time now, but i really prefer to work in go. Feels like i'm a lot more productive while writing, and i don't have to spend doubledigit minutes waiting for stuff to compile. I recently stumbled over this project and have been using it quite a lot since. It works really well and coming from Qt-land it was really easy to use the provided bindings and generate the 'classes' for signals/slots. AND the docker images are great for cross compilation. They just work :). Thank you so much for working on this.
- ball_of_lint 9y agoI recently tried out gold linker in a c++/qt project, and it nearly halved my compile time. I don't quite have incremental linking working yet, but I expect it to be even better.
- therecipe 9y agothank you :)
- pbnjay 9y agoI'm curious how this affects file sizes? I like my static binaries and portability, but I fear this would make things balloon quite a bit to get the same broad distribution. I've been planning on using an embedded webkit + html app in an upcoming desktop project. Are there any resources for how difficult it would be to learn Qt and create a reasonable portable, easily downloadable app?
- ori_b 9y agoI'd take a look at QT Quick.
- therecipe 9y agoThe file size depends on the target and what modules you use, for dynamically linked projects I would guess it's around 50mb for an average project. Maybe 20mb more on windows because of the icu libs, but those can be replaced with your own (much smaller) versions. Static projects may weight half of what the dynamic ones do, so maybe around 25mb. But depending on how much you care about file size, you could also compile your own static Qt version and then strip everything that you don't need. Here [1] are some infos about QML development and here [2] you can try out QML in the browser. [1] https://github.com/Esri/arcgis-appstudio-samples/wiki/Understanding-QML-Javascript-for-Web-Developers https://github.com/Esri/arcgis-appstudio-samples/wiki/Unders... [2] https://qmlweb.github.io https://qmlweb.github.io
- edwinyzh 9y agoI also prefer golang over c++ for simplicity. But does it have IDE support? I mean Qt Creator. In the meantime, my first choice for cross-platform GUI development is Lazarus - clean language, broad OS support, and full IDE support (drag-and-drop layout designing and integrated debugging).
- GoodbyeEarl 9y agoSorry for the newbie question, I've never written a desktop application. But do you write the UI in a different language than you write its business logic? For instance, you would write the UI in Delphi with the Lazarus IDE and then the "back-end" of your app would be written in C++, Go or something alike?
- uvatbc 9y agotl;dr: sometimes the UI can be written in a different language. Qt used to have an XML markup language that auto generated C++ UI code. Later, QML was introduced - which is a JavaScript based UI runtime. There are Qt bindings for other languages, for example Python. So you could write business logic in Python and UI in QML.
- GoodbyeEarl 9y agoThanks! So is Qt used to write both the logic and the UI?
- oneweekwonder 9y agoSo you write Object Pascal code? You don't have some freelance work avail?
- merricksb 9y agoThis was heavily discussed 5 months ago: https://news.ycombinator.com/item?id=12928526 https://news.ycombinator.com/item?id=12928526