Difference between revisions of "Qt"

From ArchWiki
Jump to: navigation, search
m (Installation)
m (Android: use wiki links)
 
(121 intermediate revisions by 51 users not shown)
Line 1: Line 1:
[[Category:Desktop environments]]
+
[[Category:Widget toolkits]]
[[Category:Development]]
+
[[ja:Qt]]
[[es:Qt]]
+
[[ru:Qt]]
[[zh-CN:Qt]]
+
[[zh-hans:Qt]]
{{Article summary start}}
+
{{Related articles start}}
{{Article summary text|Qt is a cross-platform application and UI framework for developers using C++ or QML, a CSS & JavaScript like language. This article covers the installation and developement with Qt and the tools used to configure themes, fonts and other options.}}
+
{{Related|KDE}}
{{Article summary heading|Related}}
+
{{Related|Uniform Look for Qt and GTK Applications}}
{{Article summary wiki|KDE}}
+
{{Related|GTK+}}
{{Article summary wiki|Uniform Look for Qt and GTK Applications}}
+
{{Related articles end}}
{{Article summary wiki|GTK+}}
+
[http://qt-project.org/ Qt] is a cross-platform application and widget toolkit that uses standard C++ but makes extensive use of a special code generator (called the [http://qt-project.org/doc/qt-4.8/moc.html Meta Object Compiler], or ''moc'') together with several macros to enrich the language. Some of its more important features include:
{{Article summary end}}
+
* Running on the major desktop platforms and some of the mobile platforms.
 
+
* Extensive internationalization support.
[http://qt-project.org/ Qt] is a cross-platform application and widget toolkit that uses standard C++ but makes extensive use of a special code generator (called the [http://qt-project.org/doc/qt-4.8/moc.html 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.
 
* 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 emerging as a major development platform and is the basis of the [[KDE]] software community, among other important open source and proprietary applications such as [[VLC]], [[VirtualBox]], [[Opera]], [[Mathematica]], [[Skype]], [[Maya]] and many others.
+
The Qt framework is emerging as a major development platform and is the basis of the [[KDE]] software community, among other important open source and proprietary applications such as [[VLC]], [[VirtualBox]], [[Mathematica]] and many others.
  
 
== Installation ==
 
== Installation ==
Three versions of Qt are currently available in the [[official repositories]]. They can be [[Pacman|installed]] with the following packages:
+
Two versions of Qt are currently available in the [[official repositories]]. They can be [[Pacman|installed]] with the following packages:
 
* '''Qt 5.x''' is available in the {{Pkg|qt5-base}} package, with documentation in the {{Pkg|qt5-doc}} package.
 
* '''Qt 5.x''' is available in the {{Pkg|qt5-base}} package, with documentation in the {{Pkg|qt5-doc}} package.
* '''Qt 4.x''' is available in the {{Pkg|qt4}} package.
+
* '''Qt 4.x''' is available in the {{Pkg|qt4}} package, with documentation on AUR in the {{AUR|qt4-doc}} package.
* '''Qt 3.x''' is availalbe in the {{Pkg|qt3}} package, with documentation in the {{Pkg|qt3-doc}} package.
+
* '''Qt 3.x''' is available from the AUR in the {{AUR|qt3}} package, with documentation on AUR in the {{AUR|qt3-doc}} package.
 +
 
 +
== Default Qt toolkit ==
 +
 
 +
Qt packages do not provide the usual bins (e.g. ''qmake'') in {{ic|/usr/bin}} anymore. Instead {{ic|-qt5}}, {{ic|-qt4}} and {{ic|-qt3}} symlinks are provided (e.g. {{ic|qmake-qt5}}, {{ic|qmake-qt4}}, {{ic|qmake-qt3}}). This may cause compilation failures in Qt3/4 applications.  
  
{{Warning|Qt packages do not provide the usual bins (e.g. qmake) in /usr/bin anymore. Instead -qt5, -qt4 and -qt3 symlinks are provided (e.g. qmake-qt5, qmake-qt4, qmake-qt3). This may cause compilation failures in Qt3/4 applications.}}
+
By installing {{AUR|qtchooser}} you can restore the usual bins (e.g. ''qmake'') in {{ic|/usr/bin}} and setup the Qt toolkit to use. By default Qt5 is used.
  
== Default Qt Toolkit ==
+
{{ Warning| {{AUR|qtchooser}} now is conflict with {{Pkg|qt5-base}}. You can install it in /usr/local if you really need it, but it's not officially supported[https://bugs.archlinux.org/task/51308].}}
By installing {{Pkg|qtchooser}} you can restore the usual bins (e.g. qmake) in /usr/bin and setup the Qt toolkit to use. By default Qt5 is used.
 
  
=== Using Environment variables ===
+
=== Using environment variables ===
For example, to set Qt4 export {{ic|QT_SELECT=4}} in {{ic|~/.{bash,zsh}_profile.}}
+
To define default Qt toolkit, you can create {{ic|QT_SELECT}} [[environment variable]]. For example, to set Qt4, do {{ic|1=export QT_SELECT=4}} in your shell's init file (e.g. {{ic|~/.bash_profile}} or {{ic|~/.zprofile}}).
  
 
=== Using configuration files ===
 
=== Using configuration files ===
For example, to set Qt4 symlink {{ic|/etc/xdg/qtchooser/4.conf}} to {{ic|~/.config/qtchooser/default.conf}}.
+
You can set default Qt toolkit by creating a symlink {{ic|~/.config/qtchooser/default.conf}} to one of ''.conf'' files in {{ic|/etc/xdg/qtchooser/}} directory. For example, to set Qt4 symlink {{ic|/etc/xdg/qtchooser/4.conf}} to {{ic|~/.config/qtchooser/default.conf}}:
 +
 
 +
$ ln -s {{ic|/etc/xdg/qtchooser/4.conf}} {{ic|~/.config/qtchooser/default.conf}}
  
 
== Appearance ==
 
== Appearance ==
=== Configuration ===
+
=== Qt4 ===
Qt 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. For those who still want to change the look and feel of Qt application, the ''Qt Configuration'' ({{ic|qtconfig}} or {{ic|qt3config}}) tool is available. ''QtConfig'' offers a very simple configuration for the appearance of Qt applications that gives the user easy access to the current Qt Style, colors, fonts and other more advanced options.
+
Qt4 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'' (''systemsettings5''), the settings can be found in ''Appearance > Application Style > Widget Style''.
Although not part of Qt, the ''KDE System Settings'' offer many more customization options that are also picked up by Qt applications.
+
* In Cinnamon, GNOME, Xfce, it uses GTK+ ([[Uniform look for Qt and GTK applications#QGtkStyle|QGtkStyle]]).
 
+
* In other desktop environments, it uses Windows.
==== Themes ====
 
Several styles are already included with Qt, such as a GTK+ style, a Windows style, a CDE style, etc., but others can be installed from the official repositories or the [[AUR]] (most are written for the KDE desktop):
 
* {{App|[[Wikipedia:Oxygen Project|Oxygen]]|A desktop theme that comes with the KDE desktop.|http://www.oxygen-icons.org/|{{Pkg|kdebase-runtime}}}}
 
* {{App|[[Wikipedia:QtCurve|QtCurve]]|A very configurable and popular desktop theme with support for GTK+ and Qt applications.|http://kde-look.org/content/show.php?content=40492|{{Pkg|qtcurve-kde3}} {{Pkg|qtcurve-kde4}}}}
 
* {{App|Skulpture|A GUI style addon for KDE and Qt programs that features a classical three dimensional artwork with shadows and smooth gradients to enhance the visual experience.|http://kde-look.org/content/show.php/?content=59031|{{AUR|skulpture}}}}
 
* {{App|Polymer|A port of the KDE Plastik Style to Qt3.|http://kde-look.org/content/show.php?content=21748|{{AUR|polymer}}}}
 
* {{App|Bespin|A very configurable KDE theme.|http://cloudcity.sourceforge.net/frame.php|{{AUR|bespin-svn}}}}
 
  
==== Fonts ====
+
For those who want to change the look and feel of Qt4 applications, the ''Qt Configuration'' (''qtconfig-qt4'') GUI tool is provided by the {{Pkg|qt4}} package. It offers a simple interface to configure the appearance of Qt4 applications including style, colors, fonts and some further options.
Qt fonts can be configured from ''QtConfig'' under ''Fonts > Default Font''.
 
  
==== Icons ====
+
{{Note|If you use ''GTK+'' style, then color and font settings will be ignored, and inherited from GTK+ 2.}}
There is no way of setting the icon theme from ''QtConfig'', but since Qt follows the [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html Freedesktop.org Icon Specification], any theme set for X is picked up by Qt.  
 
  
=== Manual configuration ===
+
Qt keeps all its configuration information in {{ic|/etc/xdg/Trolltech.conf}} (system-wide) or {{ic|~/.config/Trolltech.conf}} (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).
Qt keeps all its configuration information in {{ic|~/.config/Trolltech.conf}}. 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 {{ic|[Qt]}} header).  
 
  
 
For example, to change the theme to QtCurve, add:
 
For example, to change the theme to QtCurve, add:
Line 64: Line 56:
 
style=QtCurve
 
style=QtCurve
 
</nowiki>}}
 
</nowiki>}}
 +
 +
The following styles are included in Qt4: ''CDE'', ''Cleanlooks'', ''GTK+'', ''Motif'', ''Plastique'', ''Windows''. Others can be installed from the official repositories or the [[AUR]] (most are written for KDE Plasma Desktop):
 +
* {{App|Breeze|Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.|https://cgit.kde.org/breeze.git|{{Pkg|breeze-kde4}}}}
 +
* {{App|[[Wikipedia:Oxygen Project|Oxygen]]|KDE Oxygen style.|https://cgit.kde.org/oxygen.git|{{Pkg|oxygen-kde4}}}}
 +
* {{App|QtCurve|A configurable set of widget styles for KDE and Gtk.|https://cgit.kde.org/qtcurve.git|{{Pkg|qtcurve-qt4}}}}
 +
* {{App|Adwaita-Qt| A style to bend Qt applications to look like they belong into GNOME Shell.|https://github.com/MartinBriza/adwaita-qt|{{AUR|adwaita-qt4}}}}
 +
 +
=== Qt5 ===
 +
Qt5 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'' (''systemsettings5''), the settings can be found in ''Appearance > Application Style > Widget Style''.
 +
* In Cinnamon, GNOME, MATE, LXDE, Xfce, it uses GTK+ ([[Uniform look for Qt and GTK applications#QGtkStyle|QGtkStyle]]).
 +
* In other desktop environments, it uses Fusion.
 +
 +
To force a specific style, you can set the {{ic|1=QT_STYLE_OVERRIDE}} [[environment variable]]. Specifically, set it to {{ic|gtk2}} 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). Qt5 applications also support the {{ic|-style}} flag, which you can use to launch a Qt5 application with a specific style.
 +
 +
The following styles are included in Qt5: ''Fusion'', ''Windows''. Others can be installed from the official repositories:
 +
* {{App|Breeze|Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.|https://cgit.kde.org/breeze.git|{{Pkg|breeze}}}}
 +
* {{App|Oxygen|KDE Oxygen style.|https://cgit.kde.org/oxygen.git|{{Pkg|oxygen}}}}
 +
* {{App|QtCurve|A configurable set of widget styles for KDE and Gtk.|https://cgit.kde.org/qtcurve.git|{{Pkg|qtcurve-qt5}}}}
 +
* {{App|Adwaita-Qt|A style to bend Qt applications to look like they belong into GNOME Shell.|https://github.com/MartinBriza/adwaita-qt|{{AUR|adwaita-qt5}}}}
 +
* {{App|Qt style plugins|Additional style plugins for Qt5, including ''GTK+'', ''Cleanlooks'', ''Motif'', ''Plastique''.|http://code.qt.io/cgit/qt/qtstyleplugins.git|{{Pkg|qt5-styleplugins}}}}
  
 
=== Qt Style Sheets ===
 
=== Qt Style Sheets ===
Line 69: Line 82:
  
 
To run an application with a different style just execute:
 
To run an application with a different style just execute:
  $ qt_application --stylesheet style.qss
+
  $ qt_application -stylesheet ''style.qss''
  
For more information on Qt Style Sheets see the [http://qt-project.org/doc/qt-4.8/stylesheet-reference.html official documentation] or other [http://thesmithfam.org/blog/2009/09/10/qt-stylesheets-tutorial/ tutorials]. As an example Style Sheet see this [http://kde-apps.org/content/show.php/roxydoxy?content&#61;125979 Dolphin modification].
+
For more information on Qt Style Sheets see the [http://doc.qt.io/qt-5/stylesheet-reference.html official documentation] or other [http://thesmithfam.org/blog/2009/09/10/qt-stylesheets-tutorial/ tutorials]. As an example Style Sheet see this [http://kde-apps.org/content/show.php/roxydoxy?content&#61;125979 Dolphin modification].
  
 
=== GTK+ and Qt ===
 
=== 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]].
+
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 Qt5 apps under environments other than KDE Plasma ===
 +
 
 +
Unlike Qt4, Qt5 doesn't ship a qtconfig utility to configure fonts, icons or styles. Instead, it will try to use the settings from the running DE. In KDE Plasma or GNOME this works well, but in other less popular DEs or WM it can lead to missing icons in Qt5 applications. One way to solve this is to fake the running desktop environment by setting
 +
{{ic|1=XDG_CURRENT_DESKTOP=KDE}} or {{ic|GNOME}}, and then using the corresponding configuration application to set the desired icon set.
 +
 
 +
Another solution is provided by the {{pkg|qt5ct}} package, which provides a DE independent Qt5 QPA and a configuration utility. After installing the package, run {{ic|qt5ct}} to set an icon theme, and set the environment variable {{ic|1=QT_QPA_PLATFORMTHEME="qt5ct"}} so that the settings are picked up by Qt applications. Alternatively, use {{ic|--platformtheme qt5ct}} as argument to the Qt5 application.
 +
 
 +
To automatically set {{ic|QT_QPA_PLATFORMTHEME}} for user session, add the following line to {{ic|~/.profile}}.
 +
 
 +
[ "$XDG_CURRENT_DESKTOP" = "KDE" ] || [ "$XDG_CURRENT_DESKTOP" = "GNOME" ] || export QT_QPA_PLATFORMTHEME="qt5ct"
 +
 
 +
This will export {{ic|QT_QPA_PLATFORMTHEME}} environment variable for the whole user session. Note that this doesn't work on [[enlightenment]] because it has its own custom environment variable setting instead of getting it from {{ic|~/.profile}} file.
 +
 
 +
If the below errors are received, and some icons still do not appear in some of the apps, install {{pkg|oxygen}} and {{pkg|oxygen-icons}}:
 +
 
 +
Icon theme "oxygen" not found.
 +
Icon theme "oxygen" not found.
 +
Error: standard icon theme "oxygen" not found!
  
 
== Development ==
 
== Development ==
  
 
=== Supported platforms ===
 
=== 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 [[Wikipedia:Qt_(framework)#Platforms|Qt Wikipedia article]].
 
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 [[Wikipedia:Qt_(framework)#Platforms|Qt Wikipedia article]].
 +
 +
==== Android ====
 +
 +
First of all you need an [[Android|Android SDK]] and NDK.
 +
Install SDK {{AUR|android-sdk}} (some tools have been removed) or {{AUR|android-sdk-25.2.5}} and NDK {{AUR|android-ndk-10e}} from [[AUR]] or using [[Android#Android_Studio|Android Studio]].
 +
It is highly recommended to install NDK version [https://developer.android.com/ndk/downloads/older_releases.html#ndk-10c-downloads 10e] because of some [https://wiki.qt.io/Qt_for_Android_known_issues known issues].
 +
Next you are going to need QT 5 for Android. You can install it from [[AUR]] as described bellow or build it yourself, you can find build instructions on QT [http://wiki.qt.io/Android wiki] page.
 +
* {{AUR|android-qt5-arm64-v8a}} - arm64-v8a [https://developer.android.com/ndk/guides/abis.html ABI]
 +
* {{AUR|android-qt5-armeabi}} - armeabi
 +
* {{AUR|android-qt5-armeabi-v7a}} - armeabi-v7a
 +
* {{AUR|android-qt5-mips}} - mips
 +
* {{AUR|android-qt5-x86}} - x86
 +
* {{AUR|android-qt5-x86_64}} - x86_64
 +
Or you can use [http://download.qt.io/official_releases/qt/5.9/5.9.1/qt-opensource-linux-x64-5.9.1.run QT Installer].
  
 
=== Tools ===
 
=== Tools ===
 +
 
The following are official Qt tools:
 
The following are official Qt tools:
  
* {{App|[[Wikipedia: Qt Creator|Qt Creator]]|A cross-platform IDE tailored for Qt that supports all of its features.|http://qt.digia.com/Product/Developer-Tools/|{{Pkg|qtcreator}}}}
+
* {{App|[[Wikipedia:Qt Creator|Qt Creator]]|A cross-platform IDE tailored for Qt that supports all of its features.|http://doc.qt.io/qtcreator/|{{Pkg|qtcreator}}}}
* {{App|Qt Linguist|A set of tools that speed the translation and internationalization of Qt applications.|http://qt.digia.com/Product/Developer-Tools/|{{Pkg|qt}}}}
+
* {{App|Qt Linguist|A set of tools that speed the translation and internationalization of Qt applications.|http://doc.qt.io/qt-5/qtlinguist-index.html|Qt 5: {{Pkg|qt5-tools}}, Qt 4: {{Pkg|qt4}}}}
* {{App|Qt Assistant|A configurable and redistributable documentation reader for Qt ''qch'' files.|http://qt.digia.com/Product/Developer-Tools/|{{Pkg|qt}}}}
+
* {{App|Qt Assistant|A configurable and redistributable documentation reader for Qt ''qch'' files.|http://doc.qt.io/qt-5/qtassistant-index.html|Qt 5: {{Pkg|qt5-tools}}, Qt 4: {{Pkg|qt4}}}}
* {{App|Qt Designer|A powerful cross-platform GUI layout and forms builder for Qt widgets.|http://qt.digia.com/Product/Developer-Tools/|{{Pkg|qt}}}}
+
* {{App|Qt Designer|A powerful cross-platform GUI layout and forms builder for Qt widgets.|http://doc.qt.io/qt-5/qtdesigner-manual.html|Qt 5: {{Pkg|qt5-tools}}, Qt 4: {{Pkg|qt4}}}}
* {{App|Qt Quick Designer|A visual editor for QML files which supports WYSIWYG. It allows you to rapidly design and build Qt Quick applications and components from scratch.|http://qt.digia.com/Product/Developer-Tools/|{{Pkg|qtcreator}}}}
+
* {{App|Qt Quick Designer|A visual editor for QML files which supports WYSIWYG. It allows you to rapidly design and build Qt Quick applications and components from scratch.|http://doc.qt.io/qtcreator/creator-using-qt-quick-designer.html|{{Pkg|qtcreator}}}}
* {{App|QML Viewer|A tool for loading QML documents that makes it easy to quickly develop and debug QML applications.|http://doc.qt.digia.com/4.7-snapshot/qmlviewer.html|{{Pkg|qt}}}}
+
* {{App|qmlscene|A tool for loading QML documents that makes it easy to quickly develop and debug QML applications.|http://doc.qt.io/qt-5/qtquick-qmlscene.html|Qt 5: {{Pkg|qt5-declarative}}, Qt 4 QML Viewer: {{Pkg|qt4}}}}
* {{App|[[Wikipedia:Qmake|qmake]]|A tool that helps simplify the build process for development project across different platforms, similar to [[Wikipedia:CMake|cmake]], but with fewer options and tailored for Qt applications.|https://qt-project.org/doc/qt-4.8/qmake-manual.html|{{Pkg|qt}}}}
+
* {{App|[[Wikipedia:Qmake|qmake]]|A tool that helps simplify the build process for development project across different platforms, similar to [[Wikipedia:CMake|cmake]], but with fewer options and tailored for Qt applications.|http://doc.qt.io/qt-5/qmake-manual.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{Pkg|qt4}}}}
* {{App|uic|A tool that reads ''*.ui'' XML files and generates the corresponding C++ files.|http://qt-project.org/doc/qt-4.8/uic.html|{{Pkg|qt}}}}
+
* {{App|uic|A tool that reads ''*.ui'' XML files and generates the corresponding C++ files.|http://doc.qt.io/qt-5/uic.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{Pkg|qt4}}}}
* {{App|rcc|A tool that is used to embed resources (such as pictures) into a Qt application during the build process. It works by generating a C++ source file containing data specified in a Qt resource (.qrc) file.|http://qt-project.org/doc/qt-4.8/rcc.html|{{Pkg|qt}}}}
+
* {{App|rcc|A tool that is used to embed resources (such as pictures) into a Qt application during the build process. It works by generating a C++ source file containing data specified in a Qt resource (.qrc) file.|http://doc.qt.io/qt-5/rcc.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{Pkg|qt4}}}}
* {{App|moc|A tool that handles Qt's C++ extensions (the signals and slots mechanism, the run-time type information, and the dynamic property system, etc.).|http://doc.qt.digia.com/4.7-snapshot/moc.html|{{Pkg|qt}}}}
+
* {{App|moc|A tool that handles Qt's C++ extensions (the signals and slots mechanism, the run-time type information, and the dynamic property system, etc.).|http://doc.qt.io/qt-5/moc.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{Pkg|qt4}}}}
  
 
=== Bindings ===
 
=== Bindings ===
Qt has bindings for all of the more popular languages, for a full list see [[Wikipedia:Qt (framework)#Bindings|this list]].
+
Qt has bindings for all of the more popular languages, for a full list see [[Wikipedia:Qt (framework)#Programming language bindings|this list]].
  
 
The following examples display a small 'Hello world!' message in a window.
 
The following examples display a small 'Hello world!' message in a window.
  
 
==== C++ ====
 
==== C++ ====
* Package: {{Pkg|qt4}}
+
* Package:  
 +
** {{Pkg|qt4}} - Version 4.x of the Qt toolkit.
 +
** {{Pkg|qt5-base}} - Version 5.x of the Qt toolkit.
 
* Website: http://qt-project.org/
 
* Website: http://qt-project.org/
* Build with: {{ic|g++ `pkg-config --cflags --libs QtCore QtGui` -o hello hello.cpp}}
+
* Build:
 +
** The Qt4 version: {{ic|g++ $(pkg-config --cflags --libs QtGui) -o hello hello.cpp}}
 +
** The Qt5 version: {{ic|g++ $(pkg-config --cflags --libs Qt5Widgets) -fPIC -o hello hello.cpp}}
 
* Run with: {{ic|./hello}}
 
* Run with: {{ic|./hello}}
 
{{hc|hello.cpp|
 
{{hc|hello.cpp|
Line 113: Line 165:
 
     QApplication app(argc, argv);
 
     QApplication app(argc, argv);
 
     QLabel hello("Hello world!");
 
     QLabel hello("Hello world!");
   
+
 
 
     hello.show();
 
     hello.show();
 
     return app.exec();
 
     return app.exec();
Line 120: Line 172:
  
 
==== QML ====
 
==== QML ====
* Package: {{Pkg|qt4}}
+
* Package: {{Pkg|qt4}} or {{Pkg|qt5-declarative}}.
 
* Website: http://qt-project.org/
 
* Website: http://qt-project.org/
* Run with: {{ic|qmlviewer hello.qml}}
+
* Run with: {{ic|qmlviewer-qt4 hello.qml}} or {{ic|qmlscene-qt5 hello.qml}}
 
{{hc|hello.qml|
 
{{hc|hello.qml|
 
import QtQuick 1.0
 
import QtQuick 1.0
Line 140: Line 192:
 
}
 
}
 
}}
 
}}
 +
{{Note|For version 5.x of the Qt toolkit, we need to import QtQuick 2.y.}}
 +
 +
==== Python (PyQt) ====
 +
* Package:
 +
** {{Pkg|python-pyqt4}} - Python 3.x bindings for Qt 4
 +
** {{Pkg|python2-pyqt4}} - Python 2.x bindings for Qt 4
 +
** {{Pkg|python-pyqt5}} - Python 3.x bindings for Qt 5
 +
** {{Pkg|python2-pyqt5}} - Python 2.x bindings for Qt 5
  
==== Python ====
 
* Package:
 
** {{Pkg|pyqt}} - Python 3.x bindings
 
** {{Pkg|python2-pyqt}} - Python 2.x bindings
 
 
* Website: http://www.riverbankcomputing.co.uk/software/pyqt/intro
 
* Website: http://www.riverbankcomputing.co.uk/software/pyqt/intro
* Run with: {{ic|python hello-pyqt.py}} or {{ic|python2 hello-pyqt.py}}
+
* Run with: {{ic|python hello-pyqt.py}} or {{ic|python2 hello-pyqt.py}}.
 
{{hc|hello-pyqt.py|<nowiki>
 
{{hc|hello-pyqt.py|<nowiki>
 
import sys
 
import sys
Line 158: Line 214:
 
}}
 
}}
  
 +
The Qt 5.x version is slighly different:
 +
{{hc|hello-pyqt.py|<nowiki>
 +
import sys
 +
from PyQt5 import QtWidgets
 +
 +
app = QtWidgets.QApplication(sys.argv)
 +
label = QtWidgets.QLabel("Hello world!")
 +
 +
label.show()
 +
sys.exit(app.exec_())</nowiki>
 +
}}
 +
 +
==== Python (PySide) ====
 
* Package:
 
* Package:
** {{AUR|python-pyside}} - Python 3.x bindings
+
** {{Pkg|python-pyside}} - Python 3.x bindings
** {{AUR|python2-pyside}} - Python 2.x bindings
+
** {{Pkg|python2-pyside}} - Python 2.x bindings
 
* Website: http://www.pyside.org/
 
* Website: http://www.pyside.org/
 
* Run with: {{ic|python hello-pyside.py}} or {{ic|python2 hello-pyside.py}}
 
* Run with: {{ic|python hello-pyside.py}} or {{ic|python2 hello-pyside.py}}
Line 167: Line 236:
 
from PySide.QtCore import *
 
from PySide.QtCore import *
 
from PySide.QtGui import *
 
from PySide.QtGui import *
+
 
 
app = QApplication(sys.argv)
 
app = QApplication(sys.argv)
 
label = QLabel("Hello world!")
 
label = QLabel("Hello world!")
Line 176: Line 245:
  
 
==== C# ====
 
==== C# ====
* Package: {{Pkg|kdebindings-qyoto}}
+
* Package: {{AUR|kdebindings-qyoto}}{{Broken package link|{{aur-mirror|kdebindings-qyoto}}}}
 
* Website: http://techbase.kde.org/Development/Languages/Qyoto
 
* Website: http://techbase.kde.org/Development/Languages/Qyoto
 
* Build with: {{ic|mcs -pkg:qyoto hello.cs}}
 
* Build with: {{ic|mcs -pkg:qyoto hello.cs}}
Line 195: Line 264:
  
 
==== Ruby ====
 
==== Ruby ====
* Package: {{Pkg|kdebindings-qtruby}}
+
* Package: {{AUR|kdebindings-qtruby}}{{Broken package link|{{aur-mirror|kdebindings-qtruby}}}}
 
* Website: http://rubyforge.org/projects/korundum/
 
* Website: http://rubyforge.org/projects/korundum/
 
* Run with: {{ic|ruby hello.rb}}
 
* Run with: {{ic|ruby hello.rb}}
 
{{hc|hello.rb|<nowiki>
 
{{hc|hello.rb|<nowiki>
 
require 'Qt4'
 
require 'Qt4'
+
 
 
app = Qt::Application.new(ARGV)
 
app = Qt::Application.new(ARGV)
 
hello = Qt::Label.new('Hello World!')
 
hello = Qt::Label.new('Hello World!')
  
hello.show  
+
hello.show
 
app.exec</nowiki>
 
app.exec</nowiki>
 
}}
 
}}
 
==== Java ====
 
==== Java ====
* Package: {{AUR|qtjambi}}
+
* Package: {{AUR|qtjambi}}{{Broken package link|{{aur-mirror|qtjambi}}}} or {{AUR|qtjambi-beta}}{{Broken package link|{{aur-mirror|qtjambi-beta}}}}.
 
* Website: http://qt-jambi.org/
 
* Website: http://qt-jambi.org/
 +
* Build with: {{ic|javac Hello.java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar}}.
 +
* Run with: {{ic|java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar:. Hello}}.
 
{{hc|Hello.java|<nowiki>
 
{{hc|Hello.java|<nowiki>
 
import com.trolltech.qt.gui.*;
 
import com.trolltech.qt.gui.*;
Line 225: Line 296:
 
}</nowiki>
 
}</nowiki>
 
}}
 
}}
 +
{{Note|The build instructions and example have been tested on the beta version of Qt Jambi 4.7.0.}}
 +
 
==== Perl ====
 
==== Perl ====
* Package: {{Pkg|kdebindings-perlqt}}
+
* Package: {{AUR|kdebindings-perlqt}}{{Broken package link|{{aur-mirror|kdebindings-perlqt}}}}
 
* Website: http://code.google.com/p/perlqt4/
 
* Website: http://code.google.com/p/perlqt4/
 
* Run with: {{ic|perl hello.pl}}
 
* Run with: {{ic|perl hello.pl}}
Line 240: Line 313:
 
}}
 
}}
 
==== Lua ====
 
==== Lua ====
* Package: {{AUR|libqtlua}}
+
* Package: {{AUR|libqtlua}}{{Broken package link|{{aur-mirror|libqtlua}}}}
 
* Website: http://www.nongnu.org/libqtlua/
 
* Website: http://www.nongnu.org/libqtlua/
 
* Run with: {{ic|qtlua hello.lua}}
 
* Run with: {{ic|qtlua hello.lua}}
Line 252: Line 325:
 
{{Note|QtLua is not designed to develop an application in pure Lua but rather to extend a Qt C++ application using Lua as scripting language.}}
 
{{Note|QtLua is not designed to develop an application in pure Lua but rather to extend a Qt C++ application using Lua as scripting language.}}
  
== Resources ==
+
== Troubleshooting ==
* [http://qt.digia.com/ Official Website]
+
 
* [http://qt-project.org/ Qt Project]
+
=== Qt programs crash when opening file dialogs under GNOME Wayland ===
* [http://qt-project.org/doc/qt-4.8/ Qt Documentation]
+
 
* [http://planet.qt-project.org/ Planet Qt]
+
Under a GNOME Wayland environment, Qt programs such as Smplayer and Calibre may crash when opening a "FileDiag" (e.g. the "Open file" or "Save as" dialogs), because by default Qt tries to use the native GTK FileDiag, but the invocation assumes the use of X11 and would segfault in Wayland. This issue can be worked around in two ways:
 +
 
 +
* Force the use of X11 GDK backend for these Qt programs.
 +
GDK_BACKEND=x11 some_qt_program
 +
* Install the latest git snapshot of {{AUR|qgnomeplatform-git}}, which contains a fix. The platform plugin should work automatically under GNOME (3.20 or later); if not, manually set the [[Environment_variables#Using_pam_env|environment variable]]: {{ic|1=QT_QPA_PLATFORMTHEME=qgnomeplatform}} . This also has the effect of [[uniform look for Qt and GTK applications]].
 +
 
 +
=== Icon theme is not applied ===
 +
 
 +
Since Qt 5.1 SVG support has moved into a module. Since {{Pkg|qt5-base}} does not depend on {{Pkg|qt5-svg}} it may happen that the {{Pkg|qt5-base}} is installed but not {{Pkg|qt5-svg}}. 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 {{Pkg|qt5-svg}} explicitly solves the problem.
 +
 
 +
=== Theme not applied to root applications ===
 +
 
 +
As the user theme file ({{ic|$XDG_CONFIG_HOME/Trolltech.conf}}), are not read by other accounts, the selected theme will not apply to [[Running_X_apps_as_root|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: {{ic|/etc/xdg/Trolltech.conf}}
 +
* Adjust the theme as root
 +
 
 +
=== Qt4 style not respected ===
 +
 
 +
If pure Qt4 (non-KDE) applications do not stick with your selected Qt4 style, then you'll probably need to tell Qt4 how to find KDE's styles (Oxygen, Phase etc.). You just need to set the environment variable QT_PLUGIN_PATH. E.g. put
 +
 
 +
export QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
 +
 
 +
into your {{ic|/etc/profile}} (or {{ic|~/.profile}} if you do not have root access). {{ic|qtconfig-qt4}} should then be able to find your kde styles and everything should look nice again!
 +
 
 +
Alternatively, you can symlink the Qt4 styles directory to the KDE4 styles one:
 +
# ln -s /usr/lib/{kde,qt}4/plugins/styles/[theme name]
 +
 
 +
=== Applications using QML crash or don't work with Qt 5.8 ===
 +
 
 +
Starting with Qt 5.8, applications that rely on QML (such as [[SDDM]] or some [[KDE]] programs) may crash or fail to function correctly if they do not have execution privileges under {{ic|/home}} or {{ic|/var}} (e.g. if these are separate filesystems mounted as '{{ic|noexec}}'). This is a result of the '''qmlcache''' feature, which relies on being able to write files out to {{ic|.cache}} directories and then execute them. See also BBS thread [https://bbs.archlinux.org/viewtopic.php?id=222486 222486: sddm-helper crashes].
 +
 
 +
If you do not want to -- or cannot -- allow such execution privileges, a workaround is to set the following as appropriate in your [[environment variables]]:
 +
{{bc|1=QML_DISABLE_DISK_CACHE=1}}
 +
 
 +
=== All Qt5-based applications fail to run after Qt5 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 Qt5 platform theme or style plugin which has not been recompiled against the latest version of Qt5. 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 {{ic|QT_STYLE_OVERRIDE}} and {{ic|QT_QPA_PLATFORMTHEME}} environment variables, and rebuild the AUR package that provides it.
 +
 
 +
== See also ==
 +
* [http://qt.io/ Official Website]
 +
* [http://doc.qt.io/ Qt Documentation]
 +
* [http://planet.qt.io/ Planet Qt]
 
* [http://qt-apps.org/ Qt Applications]
 
* [http://qt-apps.org/ Qt Applications]

Latest revision as of 15:34, 13 September 2017

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 emerging as a major development platform and is the basis of the KDE software community, among other important open source and proprietary applications such as VLC, VirtualBox, Mathematica and many others.

Installation

Two versions of Qt are currently available in the official repositories. They can be installed with the following packages:

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

Default Qt toolkit

Qt packages do not provide the usual bins (e.g. qmake) in /usr/bin anymore. Instead -qt5, -qt4 and -qt3 symlinks are provided (e.g. qmake-qt5, qmake-qt4, qmake-qt3). This may cause compilation failures in Qt3/4 applications.

By installing qtchooserAUR you can restore the usual bins (e.g. qmake) in /usr/bin and setup the Qt toolkit to use. By default Qt5 is used.

Warning: qtchooserAUR now is conflict with qt5-base. You can install it in /usr/local if you really need it, but it's not officially supported[1].

Using environment variables

To define default Qt toolkit, you can create QT_SELECT environment variable. For example, to set Qt4, do export QT_SELECT=4 in your shell's init file (e.g. ~/.bash_profile or ~/.zprofile).

Using configuration files

You can set default Qt toolkit by creating a symlink ~/.config/qtchooser/default.conf to one of .conf files in /etc/xdg/qtchooser/ directory. For example, to set Qt4 symlink /etc/xdg/qtchooser/4.conf to ~/.config/qtchooser/default.conf:

$ ln -s /etc/xdg/qtchooser/4.conf ~/.config/qtchooser/default.conf

Appearance

Qt4

Qt4 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 (systemsettings5), 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 Qt4 applications, the Qt Configuration (qtconfig-qt4) GUI tool is provided by the qt4 package. It offers a simple interface to configure the appearance of Qt4 applications including style, colors, fonts and some further options.

Note: If you use GTK+ style, then color and font settings will be ignored, and inherited from GTK+ 2.

Qt keeps all its configuration information in /etc/xdg/Trolltech.conf (system-wide) or ~/.config/Trolltech.conf (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:

~/.config/Trolltech.conf
...
[Qt]
style=QtCurve

The following styles are included in Qt4: CDE, Cleanlooks, GTK+, Motif, Plastique, Windows. Others can be installed from the official repositories or the AUR (most are written for KDE Plasma Desktop):

  • Breeze — Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.
https://cgit.kde.org/breeze.git || breeze-kde4
https://cgit.kde.org/oxygen.git || oxygen-kde4
  • QtCurve — A configurable set of widget styles for KDE and Gtk.
https://cgit.kde.org/qtcurve.git || qtcurve-qt4
  • Adwaita-Qt — A style to bend Qt applications to look like they belong into GNOME Shell.
https://github.com/MartinBriza/adwaita-qt || adwaita-qt4AUR

Qt5

Qt5 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 (systemsettings5), 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 QT_STYLE_OVERRIDE environment variable. Specifically, set it to gtk2 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). Qt5 applications also support the -style flag, which you can use to launch a Qt5 application with a specific style.

The following styles are included in Qt5: Fusion, Windows. Others can be installed from the official repositories:

  • Breeze — Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.
https://cgit.kde.org/breeze.git || breeze
  • Oxygen — KDE Oxygen style.
https://cgit.kde.org/oxygen.git || oxygen
  • QtCurve — A configurable set of widget styles for KDE and Gtk.
https://cgit.kde.org/qtcurve.git || qtcurve-qt5
  • Adwaita-Qt — A style to bend Qt applications to look like they belong into GNOME Shell.
https://github.com/MartinBriza/adwaita-qt || adwaita-qt5AUR
  • Qt style plugins — Additional style plugins for Qt5, including GTK+, Cleanlooks, Motif, Plastique.
http://code.qt.io/cgit/qt/qtstyleplugins.git || qt5-styleplugins

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 Qt5 apps under environments other than KDE Plasma

Unlike Qt4, Qt5 doesn't ship a qtconfig utility to configure fonts, icons or styles. Instead, it will try to use the settings from the running DE. In KDE Plasma or GNOME this works well, but in other less popular DEs or WM it can lead to missing icons in Qt5 applications. One way to solve this is to fake the running desktop environment by setting XDG_CURRENT_DESKTOP=KDE or GNOME, and then using the corresponding configuration application to set the desired icon set.

Another solution is provided by the qt5ct package, which provides a DE independent Qt5 QPA and a configuration utility. After installing the package, run qt5ct to set an icon theme, and set the environment variable QT_QPA_PLATFORMTHEME="qt5ct" so that the settings are picked up by Qt applications. Alternatively, use --platformtheme qt5ct as argument to the Qt5 application.

To automatically set QT_QPA_PLATFORMTHEME for user session, add the following line to ~/.profile.

[ "$XDG_CURRENT_DESKTOP" = "KDE" ] || [ "$XDG_CURRENT_DESKTOP" = "GNOME" ] || export QT_QPA_PLATFORMTHEME="qt5ct"

This will export QT_QPA_PLATFORMTHEME environment variable for the whole user session. Note that this doesn't work on enlightenment because it has its own custom environment variable setting instead of getting it from ~/.profile file.

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

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

First of all you need an Android SDK and NDK. Install SDK android-sdkAUR (some tools have been removed) or android-sdk-25.2.5AUR and NDK android-ndk-10eAUR from AUR or using Android Studio. It is highly recommended to install NDK version 10e because of some known issues. Next you are going to need QT 5 for Android. You can install it from AUR as described bellow or build it yourself, you can find build instructions on QT wiki page.

Or you can use QT Installer.

Tools

The following are official Qt tools:

  • Qt Creator — A cross-platform IDE tailored for Qt that supports all of its features.
http://doc.qt.io/qtcreator/ || qtcreator
  • Qt Linguist — A set of tools that speed the translation and internationalization of Qt applications.
http://doc.qt.io/qt-5/qtlinguist-index.html || Qt 5: qt5-tools, Qt 4: qt4
  • Qt Assistant — A configurable and redistributable documentation reader for Qt qch files.
http://doc.qt.io/qt-5/qtassistant-index.html || Qt 5: qt5-tools, Qt 4: qt4
  • Qt Designer — A powerful cross-platform GUI layout and forms builder for Qt widgets.
http://doc.qt.io/qt-5/qtdesigner-manual.html || Qt 5: qt5-tools, Qt 4: qt4
  • Qt Quick Designer — A visual editor for QML files which supports WYSIWYG. It allows you to rapidly design and build Qt Quick applications and components from scratch.
http://doc.qt.io/qtcreator/creator-using-qt-quick-designer.html || qtcreator
  • qmlscene — A tool for loading QML documents that makes it easy to quickly develop and debug QML applications.
http://doc.qt.io/qt-5/qtquick-qmlscene.html || Qt 5: qt5-declarative, Qt 4 QML Viewer: qt4
  • qmake — A tool that helps simplify the build process for development project across different platforms, similar to cmake, but with fewer options and tailored for Qt applications.
http://doc.qt.io/qt-5/qmake-manual.html || Qt 5: qt5-base, Qt 4: qt4
  • uic — A tool that reads *.ui XML files and generates the corresponding C++ files.
http://doc.qt.io/qt-5/uic.html || Qt 5: qt5-base, Qt 4: qt4
  • rcc — A tool that is used to embed resources (such as pictures) into a Qt application during the build process. It works by generating a C++ source file containing data specified in a Qt resource (.qrc) file.
http://doc.qt.io/qt-5/rcc.html || Qt 5: qt5-base, Qt 4: qt4
  • moc — A tool that handles Qt's C++ extensions (the signals and slots mechanism, the run-time type information, and the dynamic property system, etc.).
http://doc.qt.io/qt-5/moc.html || Qt 5: qt5-base, Qt 4: qt4

Bindings

Qt has bindings for all of the more popular languages, for a full list see this list.

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

C++

  • Package:
    • qt4 - Version 4.x of the Qt toolkit.
    • qt5-base - Version 5.x of the Qt toolkit.
  • Website: http://qt-project.org/
  • Build:
    • The Qt4 version: g++ $(pkg-config --cflags --libs QtGui) -o hello hello.cpp
    • The Qt5 version: g++ $(pkg-config --cflags --libs Qt5Widgets) -fPIC -o hello hello.cpp
  • Run with: ./hello
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

hello.qml
import QtQuick 1.0

Rectangle {
    id: page
    width: 400; height: 100
    color: "lightgray"

    Text {
        id: helloText
        text: "Hello world!"
        anchors.horizontalCenter: page.horizontalCenter
        anchors.verticalCenter: page.verticalCenter
        font.pointSize: 24; font.bold: true
    }
}
Note: For version 5.x of the Qt toolkit, we need to import QtQuick 2.y.

Python (PyQt)

hello-pyqt.py
import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)
label = QtGui.QLabel("Hello world!")

label.show()
sys.exit(app.exec_())

The Qt 5.x version is slighly different:

hello-pyqt.py
import sys
from PyQt5 import QtWidgets

app = QtWidgets.QApplication(sys.argv)
label = QtWidgets.QLabel("Hello world!")

label.show()
sys.exit(app.exec_())

Python (PySide)

hello-pyside.py
import sys
from PySide.QtCore import *
from PySide.QtGui import *

app = QApplication(sys.argv)
label = QLabel("Hello world!")

label.show()
sys.exit(app.exec_())

C#

hello.cs
using System;
using Qyoto;

public class Hello {
    public static int Main(String[] args) {
        new QApplication(args);
        new QLabel("Hello world!").Show();

        return QApplication.Exec();
    }
}

Ruby

hello.rb
require 'Qt4'

app = Qt::Application.new(ARGV)
hello = Qt::Label.new('Hello World!')

hello.show
app.exec

Java

Hello.java
import com.trolltech.qt.gui.*;

public class Hello
{
    public static void main(String args[])
    {
        QApplication.initialize(args);
        QLabel hello = new QLabel("Hello World!");

        hello.show();
        QApplication.exec();
    }
}
Note: The build instructions and example have been tested on the beta version of Qt Jambi 4.7.0.

Perl

hello.pl
use QtGui4;

my $a = Qt::Application(\@ARGV);
my $hello = Qt::Label("Hello World!", undef);

$hello->show;
exit $a->exec;

Lua

hello.lua
label = qt.new_widget("QLabel")

label:setText("Hello World!")
label:show()
Note: QtLua is not designed to develop an application in pure Lua but rather to extend a Qt C++ application using Lua as scripting language.

Troubleshooting

Qt programs crash when opening file dialogs under GNOME Wayland

Under a GNOME Wayland environment, Qt programs such as Smplayer and Calibre may crash when opening a "FileDiag" (e.g. the "Open file" or "Save as" dialogs), because by default Qt tries to use the native GTK FileDiag, but the invocation assumes the use of X11 and would segfault in Wayland. This issue can be worked around in two ways:

  • Force the use of X11 GDK backend for these Qt programs.
GDK_BACKEND=x11 some_qt_program

Icon theme is not applied

Since Qt 5.1 SVG support has moved into a module. Since qt5-base does not depend on qt5-svg it may happen that the qt5-base is installed but not qt5-svg. 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 qt5-svg explicitly solves the problem.

Theme not applied to root applications

As the user theme file ($XDG_CONFIG_HOME/Trolltech.conf), 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: /etc/xdg/Trolltech.conf
  • Adjust the theme as root

Qt4 style not respected

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

export QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/

into your /etc/profile (or ~/.profile if you do not have root access). qtconfig-qt4 should then be able to find your kde styles and everything should look nice again!

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

# ln -s /usr/lib/{kde,qt}4/plugins/styles/[theme name]

Applications using QML crash or don't work with Qt 5.8

Starting with Qt 5.8, applications that rely on QML (such as SDDM or some KDE programs) may crash or fail to function correctly if they do not have execution privileges under /home or /var (e.g. if these are separate filesystems mounted as 'noexec'). This is a result of the qmlcache feature, which relies on being able to write files out to .cache directories and then execute them. See also BBS thread 222486: sddm-helper crashes.

If you do not want to -- or cannot -- allow such execution privileges, a workaround is to set the following as appropriate in your environment variables:

QML_DISABLE_DISK_CACHE=1

All Qt5-based applications fail to run after Qt5 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 Qt5 platform theme or style plugin which has not been recompiled against the latest version of Qt5. 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 QT_STYLE_OVERRIDE and QT_QPA_PLATFORMTHEME environment variables, and rebuild the AUR package that provides it.

See also