Qt-5.15.12

Introdução ao Qt5

Qt5 é uma estrutura de aplicação multiplataforma que é amplamente usada para desenvolver software de aplicação com uma Interface Gráfica de Usuário(a) (IGU) (casos nos quais o Qt5 é classificado como um kit de ferramentas de pequena engenhoca) e também usado para desenvolver aplicativos não IGU, como ferramentas de linha de comando e consoles para servidores. Dois dos principais usuários(as) do Qt são KDE Frameworks 5 (KF5) e LXQt.

Esse pacote é conhecido por construir e funcionar corretamente usando uma plataforma LFS 12.1.

Informação do Pacote

Transferências Adicionais

Dependências do "Qt5"

Exigidas

Bibliotecas do Xorg

Recomendadas

Opcionais

BlueZ-5.72 (para sdpscanner e, em tempo de execução, para o módulo QtConnectivity), GTK+-3.24.41, ibus-1.5.29, libinput-1.25.0, MariaDB-10.11.7 ou MySQL, MIT Kerberos V5-1.21.2, pciutils-3.10.0, PostgreSQL-16.2, PulseAudio-17.0, SDL2-2.30.0, unixODBC-2.3.12, Vulkan-Loader-1.3.277, assimp, Flite, Firebird, FreeTDS, libproxy, OpenAL, speech-dispatcher e tslib

Configurando o prefixo de instalação

Instalando em /opt/qt5

Os(As) editores(as) do BLFS recomendam instalar o "Qt5" em um diretório diferente de "/usr", ou seja, "/opt/qt5". Para fazer isso, configure a seguinte variável de ambiente:

export QT5PREFIX=/opt/qt5
[Dica]

Dica

Ocasionalmente, os caminhos da instalação são rigidamente codificados nos arquivos instalados. Essa é a razão pela qual /opt/qt5 é usado como prefixo da instalação em vez de /opt/qt-5.15.12. Para criar um diretório versionado do Qt5, você possivelmente crie um diretório versionado e um link simbólico:

mkdir -pv /opt/qt-5.15.12
ln -sfnv qt-5.15.12 /opt/qt5

Mais tarde, você possivelmente quera instalar outras versões do Qt5. Para fazer isso, apenas remova o link simbólico, crie o novo diretório versionado e recrie o link simbólico /opt/qt5 novamente antes de construir a versão nova. Qual versão do Qt5 você usa depende somente de onde o link simbólico aponta.

[Nota]

Nota

Se o "qca-2.3.8" tiver sido instalado e você estiver reinstalando ou atualizando esse pacote, então o "qca" precisará ser reinstalado.

Instalação do Qt5

[Atenção]

Atenção

Se o "Qt5" estiver sendo reinstalado no mesmo diretório de uma instância existente, [então] execute os comandos feitos pelo(a) "root", como "make install", a partir de um console ou gerenciador de janelas não baseado em "Qt5". Eles sobrescrevem bibliotecas do "Qt5" que não deveriam estar em uso durante o processo de instalação.

[Cuidado]

Cuidado

Se você não instalou alguma das dependências recomendadas, examine a saída gerada de ./configure --help para verificar como desabilitá-las ou usar versões internas incluídas no tarball do fonte.

[Nota]

Nota

O tempo de construção, e espaço, exigido para o "Qt5" completo é bastante longo. As instruções abaixo não constroem os tutoriais e exemplos. Remover-se a linha -nomake criará uma construção completa.

[Nota]

Nota

Os(As) editores(as) do BLFS não recomendam instalae o Qt5 na hierarquia /usr porque se torna difícil encontrar componentes e atualizar para uma nova versão. Se você realmente desejar instalar o Qt5 em /usr, os diretórios precisam ser especificados explicitamente. Nesse caso, configure QT5PREFIX=/usr e adicione o seguinte aos argumentos de configuração abaixo:

            -archdatadir    /usr/lib/qt5                 \
            -bindir         /usr/bin                    \
            -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

Agora aplique um remendo para obter as correções selecionadas pelo KDE para aqueles módulos que sejam exigidos pelos pacotes mencionados neste livro:

patch -Np1 -i ../qt-everywhere-opensource-src-5.15.12-kf5-1.patch

Presume-se que o remendo seja usado em um repositório git. Caso contrário, alguns arquivos que deveriam ser modificados pelo configure depois de aplicar o remendo não seriam tocados. Felizmente, é suficiente criar um diretório .git no diretório qmake onde o conjunto de comandos sequenciais configure for executado:

mkdir -pv qtbase/.git

Adicione outra correção para construir com GCC-13:

sed -e "/pragma once/a#include <cstdint>"                                      \
    -i qtlocation/src/3rdparty/mapbox-gl-native/include/mbgl/util/geometry.hpp \
       qtlocation/src/3rdparty/mapbox-gl-native/include/mbgl/util/string.hpp   \
       qtlocation/src/3rdparty/mapbox-gl-native/src/mbgl/gl/stencil_mode.hpp

Corrija uma vulnerabilidade de segurança no qtbase:

patch -Np1 -i ../qt-everywhere-opensource-src-5.15.12-security_fix-1.patch

Instale Qt5 executando os seguintes comandos:

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

Esse pacote não vem com uma suíte de teste.

Agora, como o(a) usuário(a) "root":

make install

Remova referências para o diretório de construção dos arquivos de dependência de biblioteca (prl) instalados executando o seguinte comando como o(a) usuário(a) root:

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

Instale imagens e crie entradas de menu para aplicativos instalados. A variável "QT5BINDIR" é usada aqui para apontar para o diretório dos programas executáveis. Se você tiver mudado o "bindir" acima, [então] "QT5BINDIR" precisará ser ajustada abaixo. Certifique-se de que a variável "QT5BINDIR" esteja definida no ambiente do(a) "root" e como o(a) usuário(a) "root":

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=Mostra documentação e exemplos do Qt5
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=Projetar GUIs para aplicativos do Qt5
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=Adicionar traduções a aplicativos do Qt5
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=Depurar aplicativos do D-Bus
Exec=$QT5BINDIR/qdbusviewer
Icon=qdbusviewer-qt5.png
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;Debugger;
EOF

Alguns pacotes, como o "VLC-3.0.20", procuram por certos executáveis com um sufixo "-qt5". Execute o seguinte comando como o(a) usuário(a) "root" para criar os links simbólicos necessários:

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

Explicações do Comando

-confirm-license: Aceita a licença sem avisar o(a) usuário(a) durante a configuração.

-opensource: Instale a versão de fonte aberto do "Qt".

-nomake examples: Essa chave desabilita a construção dos programas de exemplo incluídos no tarball do fonte. Remova-a se quiser construí-los.

-system-sqlite: Essa chave habilita uso da versão do sistema do SQLite.

-dbus-linked-openssl-linked: Essas chaves habilitam a vinculação explícita das bibliotecas do D-Bus e do OpenSSL no Qt5 em vez de abri-las via dlopen().

-journald: Essa chave permite enviar mensagens Qt para o sistema de registro journald.

-skip qtwebengine: Essa chave desabilita construir o QtWebEngine. Os(As) editores(as) do BLFS optaram por construir qtwebengine-5.15.17 separadamente.

-system-harfbuzz: Essa chave habilita o uso da versão do sistema do Harfbuzz.

Configurando o Qt5

Informação de Configuração

Se o "Sudo-1.9.15p5" estiver instalado, [então] "QT5DIR" também deveria estar disponível para o(a) superusuário(a). Execute os seguintes comandos como o(a) usuário(a) "root":

cat > /etc/sudoers.d/qt << "EOF"
Defaults env_keep += QT5DIR
EOF

Se você instalou o "Qt5" em "/usr"

Se você instalou o "Qt5" em "/usr", [então] crie uma variável de ambiente necessária para certos pacotes. Como o(a) usuário(a) "root":

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

QT5DIR=/usr
export QT5DIR

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

Se você não instalou o "Qt5" em "/usr"

Se instalou o "Qt5" em um local diferente de "/usr", [então] você necessita atualizar os seguintes arquivos de configuração, de forma que o "Qt5" seja encontrado corretamente por outros pacotes e processos do sistema.

Como o(a) usuário(a) "root", atualize o arquivo "/etc/ld.so.conf" e o arquivo de "cache" de tempo de execução do vinculador dinâmico:

cat >> /etc/ld.so.conf << EOF
# Inicia adição do Qt

/opt/qt5/lib

# Termina adição do Qt
EOF

ldconfig

Como o(a) usuário(a) root, crie o arquivo /etc/profile.d/qt5.sh:

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

QT5DIR=/opt/qt5

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

export QT5DIR

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

Conteúdo

Aplicativos Instalados: assistant, balsam, canbusutil, designer, fixqt4headers.pl, lconvert, linguist, lprodump, lrelease, lrelease-pro, lupdate, lupdate-pro, meshdebug, moc, pixeltool, qcollectiongenerator, qdbus, qdbuscpp2xml, qdbusviewer, qdbusxml2cpp, qdistancefieldgenerator, qdoc, qgltf, qhelpgenerator, qlalr, qmake, qml, qmlcachegen, qmleasing, qmlformat, qmlimportscanner, qmllint, qmlmin, qmlplugindump, qmlpreview, qmlprofiler, qmlscene, qmltestrunner, qmltime, qmltyperegistrar, qscxmlc, qtattributionscanner, qtdiag, qtpaths, qtplugininfo, qtwaylandscanner, qvkgen, rcc, repc, sdpscanner, syncqt.pl, tracegen, uic, xmlpatterns e xmlpatternsvalidator
Bibliotecas Instaladas: libQt53DAnimation.so, libQt53DCore.so, libQt53DExtras.so, libQt53DInput.so, libQt53DLogic.so, libQt53DQuick.so, libQt53DQuickAnimation.so, libQt53DQuickExtras.so, libQt53DQuickInput.so, libQt53DQuickRender.so, libQt53DQuickScene2D.so, libQt53DRender.so, libQt5AccessibilitySupport.a, libQt5Bluetooth.so, libQt5Bodymovin.so, libQt5Bootstrap.a, libQt5Charts.so, libQt5Concurrent.so, libQt5Core.so, libQt5DataVisualization.so, libQt5DBus.so, libQt5DesignerComponents.so, libQt5Designer.so, libQt5DeviceDiscoverySupport.a, libQt5EdidSupport.a, libQt5EglFSDeviceIntegration.so, libQt5EglFsKmsSupport.so, libQt5EglSupport.a, libQt5EventDispatcherSupport.a, libQt5FbSupport.a, libQt5FontDatabaseSupport.a, libQt5Gamepad.so, libQt5GlxSupport.a, libQt5Gui.so,libQt5Help.so, libQt5InputSupport.a, libQt5KmsSupport.a, libQt5LinuxAccessibilitySupport.a, libQt5Location.so, libQt5Multimedia.so, libQt5MultimediaGstTools.so, libQt5MultimediaQuick.so, libQt5MultimediaWidgets.so, libQt5Network.so, libQt5NetworkAuth.so, libQt5Nfc.so, libQt5OpenGLExtensions.a, libQt5OpenGL.so, libQt5PacketProtocol.a, libQt5PlatformCompositorSupport.a, libQt5Positioning.so, libQt5PositioningQuick.so, libQt5PrintSupport.so, libQt5Purchasing.so, libQt5Qml.so, libQt5QmlDebug.a, libQt5QmlDevTools.a, libQt5QmlModels.so, libQt5QmlWorkerScript.so, libQt5Quick.so, libQt5Quick3D.so, libQt5Quick3DAssetImport.so, libQt5Quick3DRender.so, libQt5Quick3DRuntimeRender.so, libQt5Quick3DUtils.so, libQt5QuickControls2.so, libQt5QuickParticles.so, libQt5QuickShapes.so, libQt5QuickTemplates2.so, libQt5QuickTest.so, libQt5QuickWidgets.so, libQt5RemoteObjects.so, libQt5Script.so, libQt5ScriptTools.so, libQt5Scxml.so, libQt5Sensors.so, libQt5SerialBus.so, libQt5SerialPort.so, libQt5ServiceSupport.a, libQt5Sql.so, libQt5Svg.so, libQt5Test.so, libQt5TextToSpeech.so, libQt5ThemeSupport.a, libQt5UiTools.a, libQt5VirtualKeyboard.so, libQt5VulkanSupport.a, libQt5WaylandClient.so, libQt5WaylandCompositor.so, libQt5WebChannel.so, libQt5WebSockets.so, libQt5WebView.so, libQt5Widgets.so, libQt5X11Extras.so, libQt5XcbQpa.so, libQt5XkbCommonSupport.a, libQt5Xml.so, libQt5XmlPatterns.so, and several plugins under /opt/qt5/{plugins,qml}
Diretórios Instalados: /usr/include/qt5, /usr/lib/qt5, /usr/share/doc/qt5 e /usr/share/qt5 OU /opt/qt5 e /opt/qt-5.15.12

Descrições Curtas

assistant

é uma ferramenta para apresentação de documentação on-line

balsam

é uma ferramenta para converter cenas 3D originárias de várias ferramentas de criação para o formato QML, para uso pela nova biblioteca 3D QtQuick

canbustil

é uma ferramenta para lidar com quadros arbitrários do barramento CAN. Uma Controller Area Network (CAN) é um padrão de veículo de barramento projetado para permitir que microcontroladores e dispositivos se comuniquem entre si em aplicações sem um computador anfitrião

designer

é um construtor de GUI completo. Ele inclui recursos poderosos, como modo de visualização prévia, esquema automático de pequena engenhoca, suporte para pequenas engenhocas personalizadas e um avançado editor de propriedades

fixqt4headers.pl

é um conjunto de comandos sequenciais para substituir todas as inclusões de estilo do "Qt 4" pelas inclusões do "Qt 5"

lconvert

é parte da cadeia de ferramentas "Linguist" do "Qt5". Ela pode ser usada como uma ferramenta independente para converter e filtrar arquivos de dados de tradução

linguist

fornece suporte para tradução de aplicativos para idiomas locais

lrelease

é uma ferramenta simples de linha de comando. Ela lê arquivos de tradução baseados em XML, no formato TS, e produz arquivos de mensagens usados pelo aplicativo

lrelease-pro

extrai informações do projeto a partir de projetos "qmake" e as passa para o "lrelease"

lupdate

encontra as sequências de caracteres traduzíveis nos arquivos especificados de interface do fonte, cabeçalho e do Designer do Qt e armazena as mensagens extraídas em arquivos de tradução para serem processadas pelo lrelease

lupdate-pro

lê um arquivo de projeto do "Qt" e passa as informações coletadas para o "lupdate"

meshdebug

exibe informações a respeito de arquivos de malha do qtquick-3d

moc

gera código de suporte de meta objeto do "Qt"

pixeltool

é um ampliador de área de trabalho e, conforme você move teu mouse pela tela, ele mostrará o conteúdo ampliado na janela dele

qcollectiongenerator

processa e converte arquivos de ajuda do "Qt"

qdbuscpp2xml

pega um arquivo de fonte do C++ e gera uma definição XML do D-Bus da interface

qdbus

lista serviços disponíveis, caminhos de objetos, métodos, sinais e propriedades de objetos em um barramento

qdbusviewer

é um navegador gráfico do D-Bus

qdbusxml2cpp

é uma ferramenta que pode ser usada para analisar descrições de interfaces e produzir código estático representando essas interfaces,

qdistancefieldgenerator

permite que um cache de fontes seja pré gerado para Text.QtRendering para acelerar uma inicialização de um aplicativo se a interface de usuário(a) tiver muito texto, ou múltiplas fontes, ou uma grande quantidade de caracteres distintos, por exemplo, em sistemas de escrita CJK

qdoc

é uma ferramenta usada por Desenvolvedores(as) do Qt para gerar documentação para projetos de software

qgltf

importa uma variedade de formatos de modelos 3D e exporta para ativos glTF, otimizados e de carregamento rápido, incorporados em arquivos de recursos do Qt

qhelpgenerator

é uma ferramenta usada para gerar um arquivo comprimido de ajuda do "Qt"

qlalr

é uma ferramenta usada para gerar código a partir de especificações gramaticais

qmake

usa informações armazenadas em arquivos de projeto para determinar o que deveria constar nos arquivos make que ele gera

qml

executa um arquivo QML

qmlcachegen

suporta a criação de arquivos de "cache" em tempo de construção

qmleasing

é uma ferramenta usada para definir as curvas de atenuação usando um editor interativo de curva

qmlformat

formata arquivos QML de acordo com as convenções de codificação QML

qmlimportscanner

é uma ferramenta usada para importar arquivos "QML" a partir de um diretório

qmllint

é um verificador de sintaxe para arquivos QML

qmlmin

remove comentários e caracteres de esquema de um arquivo "QML"

qmlplugindump

é uma ferramenta para criar um arquivo qmltypes

qmlpreview

é uma ferramenta usada para analisar aplicativos QML

qmlprofiler

é uma ferramenta que monitora arquivos QML e JavaScript no disco e atualiza o aplicativo ao vivo com quaisquer mudanças

qmlscene

é um utilitário que carrega e exibe documentos QML, mesmo antes que o aplicativo esteja completo

qmltestrunner

é uma ferramenta usada para fazer testes

qscxml

converte um arquivo "input.scxml" em um arquivo de cabeçalho e "cpp"

qtattributionsscanner

processa arquivos "qt_attribution.json" em fontes do "Qt"

qtdiag

é uma ferramenta para noticiar informações de diagnóstico a respeito do Qt e do ambiente dele

qtpaths

é uma ferramenta para consultar informações de caminho do Qt

qtplugininfo

despeja metadados a respeito dos plugins do Qt em formato JSON

qtwaylandscanner

converte arquivos de especificações do "Wayland" em cabeçalhos "C++" e código necessário para o "QtWayland"

qvkgen

converte arquivos de especificações do "Vulkan" em cabeçalhos e código "C++"

rcc

é um compilador de recursos usado em conjunto com o projetista

repc

é o "Replica Compiler", que gera arquivos de cabeçalho "QObject" baseados em um arquivo de definição de "API"

sdpscanner

realiza uma varredura do "Session Description Protocol" em um dispositivo remoto, usando o servidor "SDP" representado pelo dispositivo local "Bluetooth"

syncqt.pl

é um conjunto de comandos sequenciais para criar os cabeçalhos de encaminhamento nos diretórios de inclusão. É uma ferramenta interna de desenvolvimento

tracegen

é um gerador de rastreamento para o "LTTng" ou o "ETW"

uic

é um compilador "Qt" de interface de usuário(a)

xmlpatterns

fornece suporte para validação de esquemas "XPath", "XQuery", "XSLT" e "XML"

xmlpatternsvalidator

é uma ferramenta usada para validar documentos "XML"