We have been using the Qt cross platform application framework for more than a decade on various different cross platform projects ranging from desktop applications to resource constrained embedded applications. While Qt is generally known as a cross platform user interface GUI framework, it is in fact a very mature C++ framework for developing both embedded and desktop applications in native code that do not have a GUI and are headless, as is Linux daemons and Windows services. Native code developments are especially important for higher performance on resource constrained embedded platforms and perform better than higher level interpreted language developments as with C#, Python, and Java. We have a recent development experience for a customer on this specific point when running a C# based application using the Mono open source .NET framework for embedded Linux on an embedded platform.
Web User Interfaces, REST APIs, and Security
We have used Qt for both embedded and desktop applications, but more typically for our embedded applications, we develop headless applications running under embedded Linux. These headless applications provide a web interface as the user interface (UI) to the application, and a REST API interface for upstream control and status. These applications include a single tier web server developed in Qt that provides support for the HTTP/S protocol, AJAX PUTS and GETS, and REST API support. Security for page access and REST API use is based on basic browser authentication in conjunction with HTTPS. User roles are based on login credentials providing different views of web content, with similar role based REST API implementation as either read-only and read-write access.
Touchscreen User Interfaces
In addition to headless applications, we have used Qt on several touch-screen UI based implementations, which most recently includes an Android-like fluid touch-screen interface build using the Qt widget toolkit for manufacturing test equipment. This application was developed using QtWidgets, and provides a touch screen interface for an embedded instrument with a modern cell phone fluid interfaces including touch screen control, swipe navigation, rich multi-line list controls, embedded keyboards, pop up context menus, icon based selection screens, animated scene transitions, over scroll animations, international language support, kinetic scrolling, and real time 2D line graphing with auto-ranging, auto-scaling, and data decimation.
Development Languages: Native vs. Interpreted
C++ as a language, is the industry preference for high performance systems on resource constrained embedded systems that need to execute real time applications. Relative to high level interpreted languages such as C# or Python, it takes much more hand coding in C++ because the language itself does not contain inherently a full framework such as with .NET. To increase software development productivity in C++, developers take advantage of a multitude of C++ libraries that are available — many of which are open source. C++ in general as native code executes 20 to 30 percent faster than managed C# code implementing the same functionality.
Historically, we have worked for large companies that developed their own internal C++ libraries for their custom products to increase software development productivity, and to provide an abstraction layer that allowed for targeting an embedded Linux, RTOS, or emulation environment with common coding. Unfortunately, custom C++ libraries require corporate resources to maintain, document, fix bugs, and add features.
Qt is mature and stable and has a large user base that is always fixing bugs and adding features. There are hundreds of commercial cross platform applications developed in Qt including Wolfram Mathematica and the Linux KDE desktop, as well as embedded devices. 8 of the top 10 Fortune 500 companies use Qt, including LG electronics, which uses Qt for TVs and various other products in various capacities.
We have found that Qt is the best designed and supported C++ framework for both our embedded and desktop developments. It is stable on all major platforms and works on both embedded and desktop platforms. Qt is more than a GUI toolkit. It includes abstractions of network sockets, threads, Unicode, regular expressions, SQL databases, SVG, OpenGL, XML, a fully functional web browser, a help system, a multimedia framework, as well as a rich collection of GUI widgets.
Qt provides a cross-platform way of creating real time reliable applications that execute across various hardware platforms and operating systems. It is a complete mobile and embedded development platform based on the open source Qt toolkit. It is designed with a modular architecture that provides building blocks for assembling a Linux-based software stack for various embedded devices ranging from phones to set-top boxes. Qt is used across multiple industries including industrial automation systems, enterprise applications, medical, aerospace and defense, oil and gas, entertainment, in-vehicle infotainment, TV and set-top boxes, mobile and consumer devices.
Qt was used for our low latency scheduling framework, which provides a head-less user interface in the form of an integral HTTP/HTTPS web server with embedded web content.
We used Qt to create a real-time spectrum analyzer with waterfall plot as described in the post EMANE Real-Time Spectrum and Waterfall Viewer. This viewer is used for communications system development using the EMANE network emulation framework. However, this standalone viewer also provides a generalized Application Programming Interface (API) that enables this application to be driven from other applications other than EMANE.