Torn between JUCE and Qt

I have a fair bit of experience with both JUCE and Qt. I’ve worked with JUCE since 2005. I worked with Qt from about 2008 to 2015. I still maintain one Qt app, but just do the minimum to keep it working so I’m not too familiar with the latest in Qt. It is a QWidgets based app, I am not familiar with QML at all.

I think JUCE is really good for Plugins. It abstracts away all the differences between AU/VST/AAX etc which is a huge amount of work. It also handles keeping projects in sync between mac, Windows, Linux, 32 bit, 64 bit, all the plugin formats. That could probably be 16 or more targets to keep updated, which you can now do from one jucer file. It’s also good for completely custom UIs that plugins tend to have have.

The Qt team seems quiet slow to react, the latest stable release of Qt Creator still doesn’t support Apple Silicon. Qt being from the 90s has a dated coding style, and everything must be done the Qt way. I do not like that all the QWidgets must be created on the heap and then the parent widget manages lifetime. The moc wasn’t a big deal on Windows, it integrated into Visual Studio nicely. But on macOS it meant using Qt Creator instead of Xcode. I am just upgrading to Qt 6 now, I noticed they have deprecated a lot of their algorithms, and not recommend using std instead.

The biggest downside of JUCE is the quality of the widgets. They aren’t usable out of the box, lots of features are missing or non standard. It means pretty much subclassing everything. Buttons can’t be triggered by spacebar, which is the standard hotkey. Sliders don’t respond to key presses at all. Listbox isn’t even usable without subclassing. Most components don’t disable when setEnabled(false) is called on them. ComboBox, TreeView, Viewport, ListBox, and Scrollbar all still respond to keyboard or mouse events when disabled. Expect to spend a lot of time to get components to respond the way users expect them to.

Laying out components is a complete pain, the visual editor in Projucer has been deprecated and was never very good any. The Qt resource editor is much better, and their layout system works well adapting to to different platforms with different size buttons.

If you expect your application to have a significant number of dialog boxes, go with Qt – the time you save will be huge, from laying out components to not having to spend time tweaking the behaviour of components.

Qt is also much more thoroughly tested. Downsides is it is large, I was using the LGPL version, which meant I needed to ship DLLs instead of static linking, so expect to ship many megabytes of DLLs.

If your app is going to be all custom widgets, then the differences between them are pretty minimal. But do you want to deal with custom menus as well? A lot of this depends on your market fit and what your users expect.

16 Likes