GUIs, introduction and list
Before starting an application, if we do not target a particular system, we should choose a graphical user interface, and a wide choice is offered to the programmer.
But above all, for a lambda programmer, unrelated to a particular environment, a fact must be taken into consideration: the future of programming is not Windows (or any other system), it is in mobile devices and Web applications running on a server, so should we use a framework able to run on a server and a mobile.
Classical user interface on the desktop operate on the WIMP model. It is the acronym of Window, Icon, Menu, Pointing device. The principle was developed from 1973 by Xerox and popularized by Apple with the Macintosh and then by Microsoft from Windows 95.
This model is challenged by touch screens. In the case of mobiles, we are facing a considerable fragmentation of environments and graphical interfaces, as discussed in the article Programming a mobile phone , which we can overcome only with HTML 5.
List of toolkits and platforms
Toolkits contain predefined components used directly to create the interface of an application.
Qt
Qt, acquired by Nokia, then by Digia, was originally mainly used by KDE on Linux. It spread to all systems and is now the basis for programming applications for mobiles by Nokia. The toolbox, QtClick, provide a lot of ready to use code.
Since version 5.1 applications run on Android and iOS as well.
Benefits
Full API.
Fast.
OpenGL and WebKit components.
QML language of interfaces.
Great portability.
Several programming languages possible.
Allows 3D animations.
QtCreator visual development interface.
Used on (some) mobiles.
Good documentation.
Disadvantages
Heavy file to download to the user.
Free licensing for open source projects only.
JavaFX
The library of the Java programming language includes all components necessary to user interface. JavaFX makes it easier to build user interfaces.
It is possible to use Java classes in a C or PHP application.
Benefits
Complete API for the desktop or the Web.
Several development tools (see resources).
Portability.
Google GWT framework for the Web (converts Java to JavaScript).
Disadvantages
Java is rather complex to use beside JavaFX.
Not especially fast.
WPF and WinRT
WPF is the GUI and devices layer on .NET. The API which provides access to all Windows services. WinRT is the runtime of Windows 8.
Benefits
Nothing to download to the user.
Language of interface XAML or HTML 5.
Easy programming with Visual Studio.
Visual development tools for different languages including C# and JavaScript.
Disadvantages.
Works only on Windows. Ports of WPF to other systems are incomplete and none for WinRT.
Slower in execution than native code.
GTK
The graphical framework for Gnome on Linux is ported to Windows. The best-known Windows application using this framework is the Gimp, and it is available on all operating systems.
There is a port of GTK for PHP, but not updated for ages and requires a modified version of the runtime.
GTK is considered as less convenient than Qt, to equal features, and more difficult to program.
Electron
To build a local application with Web technologies: Chrome browser for rendering, HTML and CSS for the description of the interface, and JavaScript side server and interface side. This also includes the libuv library to access the file system and all extensions of Node.js.
It's a totally portable and easy-to-use solution.
As examples of use we can see Advanced Explorer and the Advanced editor on this site.
Aura
Made by Google to replace GTK to give Chrome and ChromeOS a portable graphical framework, working on Linux and Android.
It is based on OpenGL and opens a context for each window, rather than each tab in order to save resources.
Aura is probably not easy to use for an application as it is designed for the browser, but as the trend is to use the browser as the interface to the system (what ChromeOS essentially does), this framework is indirectly universal.
One can also argue that GTK has been made for Gimp and became universal, Aura could follow the same route.
ImGui
If you are looking for a very simple interface library to implement in a C++ application , ImGui may be the solution. The code is as simple as this:
ImGui::InputText("string", buffer, 128);
to display a text entry field and manage its operation. The library includes also functions for charts. It makes a heavy use of OpenGL and this can be inappropriate for some applications. It is the cost for its minimal dependencies to other libraries.
ImGui is well suited for the interface of games, for full screen apps.
See also: Nuklear , a lightweight but full framework written in C.
GuiLite
Simple and lighweight library (about 5KO) written in C++, for all platforms. An interface previewer exists for Visual Studio Code.
Benefits
Ease of use.
Different programming languages supported.
Run on the desktop and mobile.
Customizable.
Do not require other libraries, displays its own widgets.
Tcl/Tk
Tcl is a programming language and Tk a GUI toolkit, working with Tcl and other languages.
Benefits
Ease of use.
Different programming languages available if needed.
Portable.
Disadvantages
Tcl is a dynamic language, and therefore is slow.
Tk is designed for Tcl.
FTLK
Toolkit for creating graphical user interfaces in C.
Benefits
Portable (Windows, Linux, Mac and others).
Lightweight.
Supports OpenGL.
FLUID editor with a visual interface.
Disadvantages
Less comprehensive than previous alternatives.
Restricted to the C programming language.
wxWidget
Toolkit for Windows, Linux, Mac based on GTK but using native widgets. It is used with different programming languages. Disadvantages appear at use due to its lack of flexibility.
In November 2013 came the version 3.0, the first update since 1998! This proves that the project is still alive, and the last update is from 2018.
FOX Toolkit
Toolbox to create interfaces in C. Ported to Windows, Linux and other Unix.
Can help give the look of Windows applications on Linux.
SDL
A library for game programming using all resources
(sound, video, devices) of the computer, for any language, any OS. This framework provides access to OpenGL and DirectX.
We can use many programming languages, including PHP, C, Java.
For Windows, Linux.
Basic APIs
There APIs are interfaces to the systems, providing primitives used to create a library of components.
OpenGL
Portable graphics library, an alternative to DirectX, for optimal performance. It interfaces with the graphics card, and user must have a version for his graphics card, if not already installed by the seller.
There is an interface to OpenGL for browsers, WebGL .
To build your own components, you can make a tool box with libraries in this list . This will not approach the simplicity of Qt, but will be much lighter.
Cairo
Named first Xr, the Greek letters are pronounced Chi and Ro, which gave the new name.
Vector graphics API. Compatible with many systems and programming languages.
This is an interface between a toolkit and OpenGL or DirectX.
WebKit
The rendering engine of Chrome and Safari can also be used directly by an application and display HTML 5. There is a WebKit component in Qt.
The project Chromium Embedded allows, like QtWebKit, integrating a browser into an application and use HTML 5 as interface language. The browser will then displayed as an objet in the scenery.
But a simple solution would be to use Electron which offers the same features plus an additional API.
Clutter
A library supported by Intel originally intended for Meego, the system for mobile, so using little space. This is actually an interface to OpenGL which simplifies its use. It has a toolbox, Mx (like QT has QtClick). The programming language is C++ or Python. The projet is now a part of Gnome.
DirectX
Interface to audio and graphic devices on Windows.
Conclusion
We see that when a framework offers the possibility of programming for mobile phones, one enters the circle of specializations, each platform running a system for a single brand.
Otherwise, when programming for the desktop but not specifically for Windows, Qt seems to be the most comprehensive framework while being portable. The license is LGPL.
Remain still the possibility to write his own components with OpenGL or WebKit if you need a very limited interface.
See a list of tools to make graphical user interfaces on the page on EDI and a list of frameworks for mobile devices .