Qt-5.7.0

Introduction to Qt5

Qt5 is a cross-platform application framework that is widely used for developing application software with a graphical user interface (GUI) (in which cases Qt5 is classified as a widget toolkit), and also used for developing non-GUI programs such as command-line tools and consoles for servers. One of the major users of Qt is KDE Frameworks 5 (KF5).

This package is known to build and work properly using an LFS-7.9 platform.

This package is known to build properly using the gcc-6 compiler.

Package Information

Qt5 Dependencies

Required

Python-2.7.12 and Xorg Libraries

Recommended

Optional

BlueZ-5.40 (runtime, used by QtConnectivity module), HarfBuzz-1.2.7, libinput-1.3.3, MariaDB-10.1.14 or MySQL, PostgreSQL-9.5.3, PulseAudio-9.0, unixODBC-2.3.4, Firebird, and IBus

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qt5

Setting the installation prefix

Installing in /opt/qt5

The BLFS editors recommend installing Qt5 in a directory other than /usr, ie /opt/qt5. To do this, set the following environment variable:

export QT5PREFIX=/opt/qt5
[Tip]

Tip

Sometimes, the installation paths are hardcoded into installed files. This is the reason why /opt/qt5 is used as installation prefix instead of /opt/qt-5.7.0. To create a versioned Qt5 directory, you may rename the directory and create a symlink:

mkdir /opt/qt-5.7.0
ln -sfnv qt-5.7.0 /opt/qt5

Later on, you may want to install other versions of Qt5. To do that, just remove the symlink and use /opt/qt5 as the prefix again. Which version of Qt5 you use depends only on where the symlink points.

Installation of Qt5

[Warning]

Warning

If Qt5 is being reinstalled into the same directory as an existing instance, run the commands done by root, such as make install, from a console or non-Qt5 based window manager. It overwrites Qt5 libraries that should not be in use during the install process.

[Caution]

Caution

If you did not install some of the recommended dependencies, examine ./configure --help output to check how to disable them or use internal versions bundled in the source tarball.

[Note]

Note

The build time and space required for the full Qt5 is quite long. The instructions below do not build the tutorials and examples. Removing the -nomake line will create a complete build.

[Note]

Note

The BLFS editors do not recommend installing Qt5 into the /usr hierarchy because it becomes difficult to find components and to update to a new version. If you do want to install Qt5 in /usr, the directories need to be specified explicitly. In this case, set QT5PREFIX=/usr and add the following to the configure arguments below:

-bindir         /usr/bin/qt5                \
-plugindir      /usr/lib/qt5/plugins        \
-importdir      /usr/lib/qt5/imports        \
-headerdir      /usr/include/qt5            \
-datadir        /usr/share/qt5              \
-docdir         /usr/share/doc/qt5          \
-translationdir /usr/share/qt5/translations \
-examplesdir    /usr/share/doc/qt5/examples \

Install Qt5 by running the following commands:

export CXXFLAGS=-fno-delete-null-pointer-checks &&

./configure -prefix         $QT5PREFIX \
            -sysconfdir     /etc/xdg   \
            -confirm-license           \
            -opensource                \
            -dbus-linked               \
            -openssl-linked            \
            -system-harfbuzz           \
            -system-sqlite             \
            -nomake examples           \
            -no-rpath                  \
            -optimized-qmake           \
            -skip qtwebengine          &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Remove references to the build directory from the installed .pc files by running the following command as the root user:

find $QT5PREFIX/lib/pkgconfig -name "*.pc" -exec perl -pi -e "s, -L$PWD/?\S+,,g" {} \;

Remove references to the build directory from installed library dependency (prl) and profile include (pri) files by running the following commands as the root user:

find $QT5PREFIX/ -name qt_lib_bootstrap_private.pri \
   -exec sed -i -e "s:$PWD/qtbase:/$QT5PREFIX/lib/:g" {} \; &&

find $QT5PREFIX/ -name \*.prl \
   -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;

Install images and create the menu entries for installed applications. The QT5BINDIR variable is used here to point to the directory for the executable programs. If you have changed the bindir above, QT5BINDIR will need to be adjusted below. Be sure that the QT5BINDIR variable is defined in root's environment and as the root user:

QT5BINDIR=$QT5PREFIX/bin

install -v -dm755 /usr/share/pixmaps/                  &&

install -v -Dm644 qttools/src/assistant/assistant/images/assistant-128.png \
                  /usr/share/pixmaps/assistant-qt5.png &&

install -v -Dm644 qttools/src/designer/src/designer/images/designer.png \
                  /usr/share/pixmaps/designer-qt5.png  &&

install -v -Dm644 qttools/src/linguist/linguist/images/icons/linguist-128-32.png \
                  /usr/share/pixmaps/linguist-qt5.png  &&

install -v -Dm644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \
                  /usr/share/pixmaps/qdbusviewer-qt5.png &&

install -dm755 /usr/share/applications &&

cat > /usr/share/applications/assistant-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 Assistant
Comment=Shows Qt5 documentation and examples
Exec=$QT5BINDIR/assistant
Icon=assistant-qt5.png
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;Documentation;
EOF

cat > /usr/share/applications/designer-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 Designer
GenericName=Interface Designer
Comment=Design GUIs for Qt5 applications
Exec=$QT5BINDIR/designer
Icon=designer-qt5.png
MimeType=application/x-designer;
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;
EOF

cat > /usr/share/applications/linguist-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 Linguist
Comment=Add translations to Qt5 applications
Exec=$QT5BINDIR/linguist
Icon=linguist-qt5.png
MimeType=text/vnd.trolltech.linguist;application/x-linguist;
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;
EOF

cat > /usr/share/applications/qdbusviewer-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 QDbusViewer
GenericName=D-Bus Debugger
Comment=Debug D-Bus applications
Exec=$QT5BINDIR/qdbusviewer
Icon=qdbusviewer-qt5.png
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;Debugger;
EOF

Some packages such as VLC-3.0.0-20160606 look for certain executables with a -qt5 suffix. Run the following command as the root user to create the necessary symlinks:

for file in moc uic rcc qmake lconvert lrelease lupdate; do
  ln -sfrvn $QT5BINDIR/$file /usr/bin/$file-qt5
done

Command Explanations

export CXXFLAGS=-fno-delete-null-pointer-checks: Work around a build issue when using gcc-6.1 and later.

-confirm-license: Accept license without prompting user during configuration.

-opensource: Install the opensource version of Qt.

-release: This switch disables building with debugging symbols.

-nomake examples: This switch disables building of the example programs included in the source tarball. Remove it if you want to build them.

-system-sqlite: This switch enables use of the system version of SQLite.

-no-nis: This switch disables support for Network Information Service (NIS) which has been removed from recent versions of Glibc.

-dbus-linked -openssl-linked: These switches enable explicit linking of the D-Bus and OpenSSL libraries into Qt5 libraries instead of dlopen()-ing them.

-skip qtwebengine: This switch disables building the Qt Web Engine. It is only used by QupZilla-2.0.1 at this writing. Note that building the Qt Web Engine substantially increases the build time and both the build and installed size.

-optimized-qmake: This switch enables building of the optimized qmake program.

-system-harfbuzz: This switch enables use of the system version of Harfbuzz which fixes some font rendering issues in Qt5 applications but doesn't have all the features that the included one has.

Configuring Qt5

Configuration Information

If you installed Qt5 in /usr, create an environment variable needed by certain packages. As the root user:

cat > /etc/profile.d/qt5.sh << EOF
# Begin /etc/profile.d/qt5.sh

QT5DIR=/usr
export QT5DIR
pathappend $QT5DIR/bin/qt5

# End /etc/profile.d/qt5.sh
EOF

If you installed Qt5 in a location other than /usr, you need to update the following configuration files so that Qt5 is correctly found by other packages and system processes.

As the root user, update the /etc/ld.so.conf file and the dynamic linker's run-time cache file:

cat >> /etc/ld.so.conf << EOF
# Begin Qt addition

/opt/qt5/lib

# End Qt addition
EOF

ldconfig

As the root user, create the /etc/profile.d/qt5.sh file:

cat > /etc/profile.d/qt5.sh << "EOF"
# Begin /etc/profile.d/qt5.sh

QT5DIR=/opt/qt5

pathappend $QT5DIR/bin           PATH
pathappend $QT5DIR/lib/pkgconfig PKG_CONFIG_PATH

export QT5DIR

# End /etc/profile.d/qt5.sh
EOF

Contents

Installed Programs: assistant, designer, lconvert, linguist, lrelease, lupdate, moc, pixeltool, qcollectiongenerator, qdbuscpp2xml, qdbus, qdbusviewer, qdbusxml2cpp, qdoc, qhelpconverter, qhelpgenerator, qlalr, qmake, qml1plugindump, qmlbundle, qmleasing, qmlimportscanner, qmllint, qmlmin, qmlplugindump, qmlprofiler, qml, qmlscene, qmltestrunner, qmlviewer, qtdiag, qtpaths, rcc, syncqt.pl, uic, xmlpatterns, and xmlpatternsvalidator
Installed Libraries: libEnginio.so, libqgsttools_p.so, libQt5Bluetooth.so, libQt5Bootstrap.a, libQt5CLucene.so, libQt5Concurrent.so, libQt5Core.so, libQt5DBus.so, libQt5Declarative.so, libQt5DesignerComponents.so, libQt5Designer.so, libQt5Gui.so, libQt5Help.so, libQt5Location.so, libQt5MultimediaQuick_p.so, libQt5Multimedia.so, libQt5MultimediaWidgets.so, libQt5Network.so, libQt5Nfc.so, libQt5OpenGLExtensions.a, libQt5OpenGL.so, libQt5PlatformSupport.a, libQt5Positioning.so, libQt5PrintSupport.so, libQt5QmlDevTools.a, libQt5Qml.so, libQt5QuickParticles.so, libQt5Quick.so, libQt5QuickTest.so, libQt5QuickWidgets.so, libQt5Script.so, libQt5ScriptTools.so, libQt5Sensors.so, libQt5SerialPort.so, libQt5Sql.so, libQt5Svg.so, libQt5Test.so, libQt5UiTools.a, libQt5WebChannel.so, libQt5WebEngineCore.so, libQt5WebEngine.so, libQt5WebEngineWidgets.so, libQt5WebKit.so, libQt5WebKitWidgets.so, libQt5WebSockets.so, libQt5Widgets.so, libQt5X11Extras.so, libQt5XmlPatterns.so, libQt5Xml.so, and several plugins under /opt/qt5/{imports,plugins,qml}
Installed Directories: /usr/include/qt5, /usr/lib/qt5, /usr/share/doc/qt5, and /usr/share/qt5 OR /opt/qt5 and /opt/qt-5.7.0

Short Descriptions

assistant

is a tool for presenting on-line documentation.

designer

is a full-fledged GUI builder. It includes powerful features such as preview mode, automatic widget layout, support for custom widgets, and an advanced property editor.

lconvert

is part of Qt5's Linguist tool chain. It can be used as a standalone tool to convert and filter translation data files.

linguist

provides support for translating applications into local languages.

lrelease

is a simple command line tool. It reads a Qt project file and produces message files used by the application.

lupdate

reads a Qt project file, finds the translatable strings in the specified source, header and Qt Designer interface files, and produces or updates the translation files listed in the project file.

moc

generates Qt meta object support code.

pixeltool

is a desktop magnifier and as you move your mouse around the screen it will show the magnified contents in its window.

qcollectiongenerator

is a tool used to create a Qt Help Collection.

qdbuscpp2xml

takes a C++ source file and generates a D-Bus XML definition of the interface.

qdbus

lists available services, object paths, methods, signals, and properties of objects on a bus.

qdbusviewer

is a graphical D-Bus browser.

qdbusxml2cpp

is a tool that can be used to parse interface descriptions and produce static code representing those interfaces,

qdoc

is a tool used by Qt Developers to generate documentation for software projects.

qhelpconverter

is a tool used to convert files to Qt help format.

qhelpgenerator

is a tool used to generate a Qt compressed help file.

qlalr

is a tool used to generate code from grammar specifications.

qmake

uses information stored in project files to determine what should go in the makefiles it generates.

qml1plugindump

is a symlink to qtchooser.

qmlbundle

is a tool used to manage QML bundle.

qmleasing

is a tool used to define the easing curves using an interactive curve editor.

qmlimportscanner

is a tool used to import QML files from a directory.

qmllint

is a syntax checker for QML files.

qmlmin

removes comments and layout characters from a QML file.

qmlplugindump

is a tool to create a qmltypes file.

qmlprofiler

is a tool used to analyze QML applications.

qmlscene

is a utility that loads and displays QML documents even before the application is complete.

qmltestrunner

is a tool used to make tests.

qmlviewer

is a tool for loading QML documents that makes it easy to quickly develop and debug QML applications.

qtdiag

is a tool for reporting diagnostic information about Qt and its environment.

qtpaths

is a tool to query Qt path information.

rcc

is a resource compiler used in conjunction with designer.

syncqt.pl

is a script to create the forwarding headers in the include directories. It is an internal development tool.

uic

is a Qt user interface compiler.

xmlpatterns

provides support for XPath, XQuery, XSLT, and XML Schema validation.

xmlpatternsvalidator

is a tool used to validate XML documents.

Last updated on 2016-06-21 15:00:43 -0500