Qt

Qt is a cross-platform application and widget toolkit that uses standard C++ but makes extensive use of a special code generator (called the Meta Object Compiler, or moc) together with several macros to enrich the language. Some of its more important features include:

  • Running on the major desktop platforms and some of the mobile platforms.
  • Extensive internationalization support.
  • A complete library that provides SQL database access, XML parsing, thread management, network support, and a unified cross-platform application programming interface (API) for file handling.

The Qt framework is the basis of the KDE software community, as well as other important open source and proprietary applications such as VLC, VirtualBox, Mathematica and many others.

Installation

Qt 6.x and 5.x are available in the official repositories. Legacy versions of Qt (4.x and 3.x) are available from the AUR. They can be installed with the following packages:

  • Qt 6.x is available in the qt6-base package, with documentation in the qt6-doc package.
  • Qt 5.x is available in the qt5-base package, with documentation in the qt5-doc package.
  • Qt 4.x is available in the qt4AUR package, with documentation on AUR in the qt4-docAUR package.
  • Qt 3.x is available from the AUR in the package, with documentation on AUR in the package.

Default Qt toolkit

By installing you can make the Qt binaries in /usr/bin (e.g. qmake), which point to the Qt 5 versions by default (e.g. qmake-qt5), point to older versions of those tools (e.g. qmake-qt4 or qmake-qt3) instead.

Note: qtchooserAUR is now in conflict with qt5-base. You can install it to /usr/local if you really need it, but it is not officially supported anymore. See FS#51308.

Using environment variables

To define the default Qt toolkit, you can create environment variable. For example, to use Qt 4, set .

Using configuration files

You can set the default Qt toolkit by creating a symlink to one of .conf files in directory. For example, to set Qt 4 symlink to :

$ ln -s  

Configuration

Styles in Qt 5

Qt 5 decides the style to use based on what desktop environment is used:

  • In KDE Plasma, it uses the actually selected Qt style. It can be configured using KDE System Settings (systemsettings), the settings can be found in Appearance > Application Style > Widget Style.
  • In Cinnamon, GNOME, MATE, LXDE, Xfce, it uses GTK (QGtkStyle).
  • In other desktop environments, it uses Fusion.

To force a specific style, you can set the environment variable. Specifically, set it to if you want to use the GTK theme (Note: you will need to install the Qt style plugins mention below to get the GTK style). Qt 5 applications also support the flag, which you can use to launch a Qt 5 application with a specific style.

The following styles are included in Qt 5: Fusion, Windows. Others can be installed separately:

  • Oxygen KDE Oxygen style.
https://invent.kde.org/plasma/oxygen || oxygen
    • Adwaita-Qt A style to bend Qt applications to look like they belong into GNOME Shell.
    https://github.com/MartinBriza/adwaita-qt || adwaita-qt5

    Styles in Qt 4

    Qt 4 application will try to mimic the behavior of the desktop environment they are running on, unless they run into some problems or hard-coded settings.

    • In KDE Plasma, it uses the actually selected Qt style. It can be configured using KDE System Settings (systemsettings), the settings can be found in Appearance > Application Style > Widget Style.
    • In Cinnamon, GNOME, Xfce, it uses GTK (QGtkStyle).
    • In other desktop environments, it uses Windows.

    For those who want to change the look and feel of Qt 4 applications, the Qt Configuration (qtconfig-qt4) GUI tool is provided by the qt4AUR package. It offers a simple interface to configure the appearance of Qt 4 applications including style, colors, fonts and some further options.

    Qt keeps all its configuration information in (system-wide) or (user-specific). The file is rather difficult to navigate because it contains a lot of information not related to appearance, but for any changes you can just add to the end of the file and overwrite any previous values (make sure to add your modification under the [Qt] header).

    For example, to change the theme to QtCurve, add:

    The following styles are included in Qt 4: CDE, Cleanlooks, GTK, Motif, Plastique, Windows. Others can be installed separately:

    • Adwaita-Qt A style to bend Qt applications to look like they belong into GNOME Shell.
    https://github.com/MartinBriza/adwaita-qt || adwaita-qt4AUR

    Qt Style Sheets

    An interesting way of customizing the look and feel of a Qt application is using Style Sheets, which are just simple CSS files. Using Style Sheets, one can modify the appearance of every widget in the application.

    To run an application with a different style just execute:

    $ qt_application -stylesheet style.qss

    For more information on Qt Style Sheets see the official documentation or other tutorials. As an example Style Sheet see this Dolphin modification.

    GTK and Qt

    If you have GTK and Qt applications, their looks might not exactly blend in very well. If you wish to make your GTK styles match your Qt styles please read Uniform look for Qt and GTK applications.

    Configuration of Qt 5 applications under environments other than KDE Plasma

    Unlike Qt 4, Qt 5 does not ship a qtconfig utility to configure fonts, icons or styles. Instead, it will try to use the settings from the running desktop environment. In KDE Plasma or GNOME this works well, but in other less popular desktop environments or window managers it can lead to missing icons in Qt 5 applications. One way to solve this is to fake the running desktop environment by setting or GNOME, and then using the corresponding configuration application to set the desired icon set.

    Another solution is provided by the package, which provides a Qt 5 QPA independent of the desktop environment and a configuration utility. After installing the package, run to set an icon theme, and set the environment variable so that the settings are picked up by Qt applications. Alternatively, use as argument to the Qt 5 application.

    provides a patched qt5ct with better integration to KDE applications, including KDE QML applications.

    If the errors below are received, and some icons still do not appear in some of the applications, install and :

    Icon theme "oxygen" not found.
    Icon theme "oxygen" not found.
    Error: standard icon theme "oxygen" not found!

    Development

    Supported platforms

    Qt supports most platforms that are available today, even some of the more obscure ones, with more ports appearing every once in a while. For a more complete list see the Qt Wikipedia article.

    Android

    Note: Qt Creator 4.12 or later can set up the SDK Tools, NDK, and essential packages automatically. For more information, see Qt Creator: Specifying Android Device Settings

    First of all, you need an Android SDK and NDK from AUR or using Android Studio.

    SDK requires OpenJDK too. Diffenent Qt versions have different version requirements, check here for detail.

    Next you are going to need Qt 5 for Android. You can install it from AUR as described below or build it yourself, you can find build instructions on Qt wiki page.

    In case of problems you may want to visit known issues.

    • - armeabi-v7a
    • - aarch64
    • - x86
    • - x86_64

    Alternatively, you can use the official Qt installer.

    Tools

    The following are official Qt tools:

    • Qt Assistant A configurable and redistributable documentation reader for Qt qch files.
    https://doc.qt.io/qt-5/qtassistant-index.html || Qt 5: qt5-tools, Qt 4: qt4AUR
    • qmlscene A tool for loading QML documents that makes it easy to quickly develop and debug QML applications.
    https://doc.qt.io/qt-5/qtquick-qmlscene.html || Qt 5: qt5-declarative, Qt 4 QML Viewer: qt4AUR

    Bindings

    Qt has bindings for all of the more popular languages, see https://wiki.qt.io/Language_Bindings for a full list.

    The following examples display a small 'Hello world!' message in a window.

    C++

    hello.cpp
    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char **argv)
    {
        QApplication app(argc, argv);
        QLabel hello("Hello world!");
    
        hello.show();
        return app.exec();
    }
    

    QML

    Python (PyQt)

    • Package: - Python 3 bindings

    Python (PySide2)

    C#

    See QtSharp.

    Troubleshooting

    Disable/Change Qt journal logging behaviour

    When using KDE and/or any other Qt desktop environment debug info may be frequently be logged in the systemd journal.

    Set as environment variable to change this behaviour, e.g. to completely disable logging:

    To disable only debug logging, use QT_LOGGING_RULES="*.debug=false".

    Icon theme is not applied

    Since Qt 5.1 SVG support has moved into a module. Since qt5-base does not depend on it may happen that the qt5-base is installed but not . This results in deceptive icon theme behaviour. Since SVG is not supported the icons are silently skipped and the icon theme may seem to be unused. Installing explicitly solves the problem.

    Theme not applied to root applications

    As the user theme file (), are not read by other accounts, the selected theme will not apply to X applications run as root. Possible solutions include:

    • Create symlinks, e.g
      # ln -s /home/[username]/.config/Trolltech.conf /etc/xdg/Trolltech.conf
    • Configure system-wide theme file:
    • Adjust the theme as root

    Qt 4 style not respected

    If pure Qt 4 (non-KDE) applications do not stick with your selected Qt 4 style, then you will probably need to tell Qt 4 how to find KDE's styles (Oxygen, Phase etc.). You just need to set the environment variable . E.g.:

    QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
    should then be able to find your kde styles and everything should look nice again!

    Alternatively, you can symlink the Qt 4 styles directory to the KDE4 styles one:

    # ln -s /usr/lib/{kde,qt}4/plugins/styles/theme_name

    All Qt 5-based applications fail to run after Qt 5 update

    If you get an error similar to

    Qt FATAL: Cannot mix incompatible Qt library (version 0x50900) with this library (version 0x50901)

    then you are most likely using a Qt 5 platform theme or style plugin which has not been recompiled against the latest version of Qt 5. These usually use Qt private headers which means they depend on an exact version of Qt and not just a matching soname. Figure out which theme/style you are using by checking the and environment variables, and rebuild the AUR package that provides it.

    QXcbConnection: XCB error: 2 (BadValue)

    Create a file with such content :

    Graphics misaligned or scaled improperly

    See HiDPI#Qt 5.

    Dead keys not working for Qt apps

    If you have set the right keyboard configuration and dead keys are working in GTK apps (or other widget toolkits) but not in KDE or any Qt apps, then you might not have the proper compose file loaded in your Xorg session.

    A way to confirm that is to:

    1. launch a Qt app with logging rule enabled, eg. launching : QT_LOGGING_RULES=qt.xkb.compose.debug=true qtqr
    2. then try to write a character using a dead key, eg. for (LATIN SMALL LETTER E WITH CIRCUMFLEX)
    3. if you encounter then you probably have this issue.

    To fix this, first identify your locale. Then, if your locale doesn't have its own folder in , eg. fr_FR.UTF-8, look for it in the mapping file to find the corresponding compose file (eg. ):

    Now create or edit to include this compose file:

    Finally, restart your Qt app, dead keys should be working and error should have disappeared whenever you debug with QT_LOGGING_RULES=qt.xkb.compose.debug=true.

    gollark: Yes.
    gollark: Anyway, it probably can work, just do it better.
    gollark: javascriptBAD?
    gollark: Just run a local HTTP server like the python one.
    gollark: Ænyway, did you make it work?

    See also

    This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.