11 ms·
C++ UI Libraries
- slezyr 7y ago> Qt > feature creep, the project > uses ancient paradigms > tends to overtake all your structures > slow > I don’t like it Seriously?...
- geezerjay 7y agoI found it quite amusing, specially as the author failed to present a case -- and an example -- of what he perceives as being a modern paradigm. I mean, how many projects he listed that supported any kind of UI design tool? To me, Qt is still leaps and bounds beyond any alternative, not only in is design-centric tooling but also ease of use. Doubly so with Qt Quick. I find it quite strange that those aspects of Qt aren't readily noticed by someone who bothers to produce a list of C++ UI toolkits
- einpoklum 7y agoQt uses pointers, meta-objects, pre-precompiler, inheritance over templates, little use of the standard library... need I say more? It is leaps and bounds beyond other things - but those leaps and bounds are into the past.
- badsectoracula 7y ago> little use of the standard library FWIW this is a plus :-P i prefer working with Qt's containers and strings than STL (not specific to Qt really, i prefer almost any other container, string, etc library than STL, the API of which i find very unintuitive). Qt isn't just a library really, it is a framework you build your application around, when you use it you are supposed to buy in everything it does.
- jcelerier 7y agoSo, please tell us : - how do you implement reflection without either ugly macros or a precompiler? - how do you implement metaclasses without a meraobject ? (e.g. how would you list all the methods or properties of a class) - how do you implement a tree structure where the parents knows its children and the children know its parent in modern C++ (or Rust without unsafe :-)) ?
- geezerjay 7y ago> Qt uses pointers That statement lies somewhere between simplistic and out-right wrong. Qt uses pointers just like C++'s smart pointers use pointers. https://doc.qt.io/qt-5/objecttrees.html https://doc.qt.io/qt-5/objecttrees.html Moreover, Qt also provides a collection of smart pointers, which are used quite extensively by Qt. https://wiki.qt.io/Smart_Pointers https://wiki.qt.io/Smart_Pointers > meta-objects, pre-precompiler I fail to see the point of your complaint. Besides the fact that Qt's "pre-compiler" is used to transparently support stuff such as UI design tooling and Qt's resource system (which handles embedding images and i8n), Qt's meta-object system also adds the boilerplate code that implements stuff such as event loops, IPC, observers, and message-passing. So, actually, what's your point? This complaint is particularly absurd if we compare Qt with unquestionably modern technologies such as the Android stack, whose build process is jam-packed with precompiler steps and whose project trees are filled to the brim with XML-based DSLs. > inheritance over templates, little use of the standard library These complaints make absolutely no sense at all. > need I say more? ...Yes? You actually failed to make a single point, let alone presented a rational argument to back your assertion. > It is leaps and bounds beyond other things - but those leaps and bounds are into the past. This jab is simply stupid, more so in light of your complains.
- ahartmetz 7y agoI might be a wee bit biased because I work with Qt, but seriously, its breadth, quality, and documentation are why it's the quasi-standard for cross-platform UI programming. There is currently a discussion about the ownership model (I guess that is meant with "ancient paradigms") on the development mailing list. The ownership model isn't really among the top n problems during typical development in any case. There is also QML which is an extremely productive way to create hardware accelerated touch-friendly UIs. QML is widely used in embedded systems.
- pier25 7y agoCan you point out some big desktop projects made with QT that run on macOS and/or Windows?
- rapsey 7y agoTelegram desktop client app, dropbox.
- vram22 7y agoI had read somewhere a while ago that the Dropbox clients were written in wxPython. Not sure if that was right then, or has changed since I read it.
- detaro 7y agoAutodesk uses it, e.g. for Maya and Eagle. Tableau. Some game engines use it for editor tooling, e.g. CryEngine. In the open-source world: Krita, Scribus, Texmaker.
- ahartmetz 7y agoBig in line count but not user count: Professional (the REALLY expensive stuff) 3D modeling and electronic design automation (EDA) packages.
- maccard 7y agoI believe Maya and OBS use it
- blattimwind 7y agoDidn't you know that declarative, binding-oriented, hardware-accelerated, scene-graph based GUIs are both based on ancient, completely outdated paradigms, and slow? And even besides QML, stuff like QGraphicsScene isn't really what I would call slow for CPU-based 2D graphics. It's good enough to be the rendering system for e.g. ECAD design tools.
- rapsey 7y agoIt is unfortunate that the libui author very much insists on doing everything himself instead of encouraging a more community oriented development approach. The job is too big for any single person. If that project was managed better it would be huge. Even by basically being unusable it still has so much interest.
- 52-6F-62 7y agoI look back into that library and it’s derivatives every other month hoping. It’s intuitive to use as is, though I haven’t honestly look at the design. It could be great.
- pault 7y agoWait, what's stopping the community from helping out? It is open source, right?
- rapsey 7y agoWell if PR don’t get merged because the author plans on redoing that part of the lib or does not fit with their “vission” that pretty effectively kills the community help.
- vortico 7y agoI can completely relate. Some contribution is good when a project has established a few regular contributers, but a lot of open-source maintenance these days is babysitting drive-by programmers. In my experience, people's code can be so bad, it would take 2x the time to fix than to implement myself with nothing but a brief feature request from them instead.
- pier25 7y agoDesktop crossplatform development is a weird beast. Yeah you get to share a lot of code between platforms and it's easy to get 80% there, but getting a polished UI is a lot of work. In some cases such as using JUCE for making audio plugins it's even desired to not have a native UI since users expect each plugin to have its own UI. But unless you are huge, like say Adobe, having a nice and polished cross platform UI for application development is simply not feasible. After years I've come to the conclusion that the proper way of supporting multiple platforms is having native UIs and sharing application logic in any way you can between platforms. I think that's the idea behind Xamarin.
- inspector-g 7y agoEven Adobe has bungled its cross-platform UI support/tooling a number of times. I think the reduced scope definitely helps though, but even in that scenario some problems seem to unavoidably surface. Source: have written plugins for Adobe products for many years.
- pier25 7y agoWhat do you mean by "reduced scope"?
- tomcam 7y agoActually JUCE has deep coverage of highly portable UI concepts as well. I think it compares favorably with QT.
- c-smile 7y agoI like JUCE architecture as probably more than other library. I actually even considered JUCE as a backend for my Sciter: https://sciter.com/sciter-on-mac-with-juce-backend/ https://sciter.com/sciter-on-mac-with-juce-backend/ But the problem is that JUCE uses pure software rasterizer. That unfortunately does not work for high-DPI monitors. GPU acceleration is required for almost all modern UI applications.
- 7y ago
- mindviews 7y agoWhile lacking in lots of built-in UI widgets, I use Cinder like a UI library. https://libcinder.org/ https://libcinder.org/ Perhaps "graphics library" would be a better descriptor and explains why I didn't find it on the list. But with mouse/touch, images, audio, video, etc. support, "graphics library" seems too narrow of a description. Maybe it's better to think of as a GUI library without a lot of commitments to the usual set of GUI widgets.
- TehCorwiz 7y agoCinder looks neat. I'm curious though, the only packages it offers are for Windows or OS X. Do you know if it supports Linux at all?
- mindviews 7y agoI've used it on Linux (Raspberry Pi for my case) just fine. Guides here if you need it: https://www.libcinder.org/docs/guides/linux-notes/index.html https://www.libcinder.org/docs/guides/linux-notes/index.html
- TehCorwiz 7y agoThanks! I'll give that a try.
- daeken 7y agoIt does, yeah. They don't distribute pre-built linux packages, but most distros do.
- pier25 7y agoI used Cinder on a couple of projects and it's great for what it is. It would be a solid start for making your own UI library, but that is a considerable task.
- badsectoracula 7y ago> Cons: [...] I don’t like it I found that reasoning funny for something like Qt that almost everyone knows, but as i was reading on and on, i found myself asking "why" to many of those cons (and some pros). I do not think this list is very useful really, it is mainly a link dump and the descriptions also seem to be taken from the sites, at least for the less popular ones. I'd prefer to see an actual review (even a single paragraph, it would help explain why "IDE?" is both a pro and con for U++) which go a bit more in detail than "ugly af" (which i disagree with, btw, i like how Fox Toolkit looks) and "sourceforge" (wth is the problem with a site's project being on sourceforge? It provides excellent tools for projects, not everyone has to monoculture themselves on GitHub). Also it is a bit wrong. Both Motif and WTL are not dead projects, Motif is still getting updates (although it is mostly bugfixes) and WTL has new commits often with the original developer at the helm.
- timw4mail 7y agowxWidgets seems to strike the best balance between documentation, activity, and having native widgets. It's also true that the API is weird, and some of the wrapped native APIS are deprecated, or work weirdly with modern features. Now if the qt branch for Linux was stable... But really, C++ has so much choice compared to say, Rust.
- badsectoracula 7y agoYeah, of all the popular C++ tookits listed in the site, my personal "favorite" is wxWidgets (favorite in quotes because i do not really like it, it is just the one i found myself being more comfortable with). We're using Qt at my current job and while i'm ok with it, i still like working with wxWidgets more than Qt (even if Qt is certainly more polished). I found documentation fine with both toolkits, although i really like that wxWidgets's docs are in CHM format so i can quickly search and scan them locally with a handy tree of contents at the side. With Qt i have to use the online docs and searching goes through Google which slows things down (...there might be some offline docs at the Qt site to download, but i couldn't find it).
- slezyr 7y agoQt Assistant(Offline doc browser) comes with Qt. You can also use Zeal(supports offline docs for JS/HTML/CSS/TS/Vue/..., OpenGL, Qt, and many others)
- badsectoracula 7y agoIt does, but it doesn't contain the Qt documentation. It only has documentation for itself. It might be that something is missing, i just cannot figure out what.
- ahartmetz 7y agoYou are missing some documentation packages or they somehow went missing from the index. You can add them (.qch files) in the settings menu of Assistant.
- m0zg 7y agoWhen it comes to embedded in particular, Qt has another major disadvantage: you have to pay royalties (!) to Qt, and worse yet, you have to deal with their slimy salespeople.
- mwkaufma 7y agoPaying for software is good, actually.
- m0zg 7y agoI don't mind paying for software. If it was a one-time payment for a royalty-free library, we'd pay a few thousand dollars, no problem. But this is a cost per device thereafter (in addition to the substantial up-front cost), which in embedded could mean crazy money. So we just hacked up GTK to meet our needs, for $0 per unit cost.
- analognoise 7y agoUntil you have to maintain it, or find developers for it. From a business perspective there are a ton of reasons why just using Qt would be a good option. If you're going to build a million of something, and you have a team of 50 programmers, you're already going to use a standard/well supported library. A licensing fee for each unit might be bad, but being able to hire another 10/20/100 people who are all familiar with that framwork already is a net benefit, even with the license cost. It's cheaper to just use Qt, all things considered.
- detaro 7y agoYes, Qt is a good option in many cases, but that doesn't mean everyone not using it has made the wrong choice, all things considered. The parent posters company might be in a completely different situation or scale.
- analognoise 7y ago
- klodolph 7y ago> Dear ImGui > Cons > nothing jumps out to me Why the fuck am I reading this article? I could easily write "nothing jumps out to me" or list a bunch of first-impressions of GUI libraries. But I can tell you off-hand a list of cons for Dear ImGui, and if you're interested there are plenty of Qt -vs- ImGui comparisons out there based on people who have actually switched and done a writeup. (Various people fall on both sides of this debate.) https://deplinenoise.wordpress.com/2017/03/05/why-qt-and-not-imgui/ https://deplinenoise.wordpress.com/2017/03/05/why-qt-and-not... https://gist.github.com/bkaradzic/853fd21a15542e0ec96f7268150f1b62 https://gist.github.com/bkaradzic/853fd21a15542e0ec96f726815... There are definitely use cases out there where Dear ImGui is a clear winner over Qt, and vice versa, and if you're going to compare GUI frameworks I would expect to want to know more about them. I have a big ole' bag of Google Docs that contain comparisons like this, but I sure as hell ain't gonna share them because they're full of subjective declarations and I stop evaluating an option as soon as I've figured out it doesn't meet my needs.
- felixguendling 7y agoI consent with you that many pros and cons are rather subjective and pros/cons depend on the specific use case. On the other hand, I like having a list of all these libraries with their supported platforms, license and a screenshot. This alone gives a pretty good overview of what's there. Not all pros/cons are subjective (e.g. having a GUI wysiwyg editor is definitely a pro for some use cases). Anyway, thanks for sharing your view and thanks for sharing this comprehensive overview.
- klodolph 7y agoYes it is useful to have a list of everything, but I feel like I can get a list like this in about a half hour with Google. What I can't get in a half hour is a summary of the problems people have had with particular framework, or the reasons why they chose to start using or stop using a particular framework. The picture from the beginning is very exciting and optimistic. To pick on ImGui again, it's easy to get started--but I know there are some issues with larger projects, some things that are hard to do in immediate mode, etc.
- 7y ago
- gok 7y agoAh cross-platform UI libraries, when you want the user experience of Electron with the convenience and safety of C++.
- throwaway55554 7y agoYou forgot performance and resource utilization.
- BubRoss 7y agoThis is beyond ignorant. I can create a tiny fast GUI with no dependencies using fltk in 1/1000th the size that runs with zero lag or latency.
- rightbyte 7y agoIt might be nostalgia, but I kinda miss writing simple stupid looking in practice fixed size and screen ratio win32-api apps. It was so simple compared to how things work nowadays.
- guido_vongraum 7y agoSciter is fantastic, and honestly I don't get it why being closed source is a con. In fact, both 'commercial license / closed source' statements are not quite true - one may link against the precompiled dll for free, even in commercial apps (as cheap as that could be), while commercial licenses, starting from fair $310 (a lifetime license!), are there for those who need static linking, dedicated support and, mind you, access to the sources. But even free users can expect a welcoming and timely response from the author (Sciter is a one-man affair). I, for one, never had a condescending or impolite reply to the dumbest of my questions. Also, the article doesn't mention the fact that Sciter is more widespread than it might seem - for example, many Windows AV solutions, including Eset, Norton, Avast, Bitdefender and Comodo, use it as GUI engine.
- BubRoss 7y agoClosed source is a con, separate markup language guis are a con, 5MB binaries are a con.
- guido_vongraum 7y agoThat separate language can be learned in a few days and leave you wondering how one guy managed to make things more logical than a crowd of people around JS. If 5MB is a con, what do you say about 30MB for Qt and ~100MB for Electron? Also, could you please elaborate on the first statement?
- BubRoss 7y agoMarkup languages for a GUI where isn't needed is a pain because you have a source of indirection when you could just pass the data that the UI library wants directly. Why have a separate text representation and if it must be there, why HTML and CSS? Json would allow you to give the information directly instead of using the convoluted rules of a system that has evolved over decades? A text language that isn't just values being passed creates new rules and an opaque layer when it is completely unnecessary. I don't know why Qt takes 50MBs or more for hello world or why anyone would use electron at all. At least Qt will run fast and not have lag and latency. Electron is just the worst of all worlds unless all someone knows is JavaScript.
- yellowapple 7y agoCome on, man; if you're gonna allude to the awesomeness of a project's website, the least you could do is actually link to it! For those as curious as I was: Amulet: https://www.cs.cmu.edu/afs/cs.cmu.edu/project/amulet/www/amulet-home.html https://www.cs.cmu.edu/afs/cs.cmu.edu/project/amulet/www/amu... Yzone: http://lifesoft.chat.ru/yzone/ http://lifesoft.chat.ru/yzone/
- yakubin 7y agoRegarding GTK/gtkmm: > - building & linking is hell Building GTK itself perhaps. I haven't tried that. However, to use it in an application it appears that adding a couple lines to your CMakeLists.txt suffices[1]. I've used GTK (in C) in the past and had no problems with the "building the application" part. > - GNOME An explanation for why you see GTK's association with GNOME as a con would be appropriate. > - looks meh How it looks, depends on the theme used. However, I do agree that it "looks meh" with Adwaita (the currently default theme). [1] https://wiki.gnome.org/Projects/gtkmm/UsingCMake https://wiki.gnome.org/Projects/gtkmm/UsingCMake
- 13415 7y agoIn my opinion Adwaita dark looks pretty good. Since I'm currently building a Gtk3 app in Go, I'm very curious: Which theme would you prefer for a modern desktop application?
- yakubin 7y agoWith GNOME I use Arc-Darker. With i3 I use Numix. I generally prefer Numix, but for some reason it looks weird e.g. with nautilus.
- eco 7y agoI'm a longtime user (15+ years) of wxWidgets in a commercial application. It's served us well during that time but lately it's been feeling more and more like our software looks outdated. Native UI is long touted as a pro but more and more software is eschewing the native look to stand out. Even Microsoft has been abandoning the win32 look in their win32 applications (Office, VS, etc.). I found the linked page a few months back and was disappointed that there was no clear winner for someone that wants a nice, modern looking interface. JUCE looked nice but is weirdly focused on the niche audio applications field (and their website is so full of marketing copy it's hard to even get a feel for what it's like to use and how things fit together). I'm a fan of the concept of IM GUIs in general (though pure immediate mode UI probably isn't appropriate for us for a variety of reasons) but Dear ImGui and most of the others just don't do the right UI paradigms to fit an application like ours (a thousand floating windows would drive our users insane). We're at this weird place were game UI libraries look great (or can be made to) but aren't appropriate for information dense commercial applications, the available libraries designed for that use case look awful, and the big companies that have great UIs aren't sharing them with anyone.
- c-smile 7y ago> the big companies that have great UIs aren't sharing them with anyone. Here are some "big companies" https://sciter.com/#customers https://sciter.com/#customers and the library they use for their UIs.
- 13415 7y agoIMHO, only Evernote stands out in this list. Most of the other companies seem to have trivial user interfaces requirements. The GUI for an antivirus product could be built with just about any framework.
- c-smile 7y ago"The GUI for an antivirus product could be built with just about any framework" Not "any" as Section 508 is mandatory for example. That really limits your options to Qt and Sciter from that list (if to consider style of their UI). Qt is too large for them and not that convenient as they need. Yet DirectX (hardware accelerated) rendering is the must for high-DPI support. And check this: https://sciter.com/from-skeuomorph-to-flat-ui-evolution-of-one-application/ https://sciter.com/from-skeuomorph-to-flat-ui-evolution-of-o... . That is about 12 years of one application that is transitioned from Skeumorphism to Metro style UI without changing native code of UI.
- theredbox 7y agoHonestly everyone should just use sciter and support Andrew.
- int_19h 7y agoWhy should everyone promote a closed source platform?
- T3RMINATED 7y agowhy you a UI Nazi? why? Qt is the best thing since .NET and you are hating on it.
- jasonhansel 7y agoIt seems like native desktop app development is getting harder simply because fewer people are doing it; web apps seem to be the future. Less investment -> less modernization -> less usage -> even less investment
- je42 7y agoWhy not use dead projects ? I like TurboBadger for example. It is pretty feature complete and the code base is well developed. so changes and/or fixes can be done quite easily.