Configuració al Windows
Introducció
Les Qt tenen un suport gran del Windows, i per tant les aplicacions que fan ús dels extra-cmake-modules de les Qt i KDE no requeriran moltes modificacions per a funcionar correctament al Windows.
Són necessàries 3 coses:
L'esquema de Craft és necessari per a empaquetar totes les dependències juntament amb l'aplicació per a generar un executable.
La directiva de preprocessador #ifdef Q_OS_WIN es pot utilitzar per a escriure codi que només s'aplicarà quan l'aplicació estigui construïda en el Windows. Això és necessari almenys una vegada per a forçar l'estil Brisa a l'aplicació de manera que es vegi bé en el Windows, però depenent de l'aplicació pot requerir més.
Empaquetar les icones necessàries perquè l'aplicació funcioni en el Windows és el pas més complex, però tant els extra-cmake-modules (ECM) de KDE com les Qt proporcionen mitjans per a fer més fàcil aquesta feina.
Esquema de Craft
Per a començar, primer heu de seguir Construir el programari KDE al Windows amb Craft perquè obtingueu un esquema de Craft funcional i almenys pugueu construir la vostra aplicació al Windows.
Un cop pugueu construir el projecte, obtindreu errors de compilació i en temps d'execució que us ajudaran a corregir qualsevol problema de compatibilitat amb el Windows.
Estil Brisa
La guia d'aprenentatge del Kirigami ja hauria de ser majoritàriament compatible amb el Windows, però els passos necessaris per aconseguir-ho han de ser explícits.
Les dues modificacions que s'han de fer per assegurar que s'utilitza l'estil Brisa és establir el QStyle a breeze i establir l'estil dels Qt Quick Controls a org.kde.desktop.
Un QStyle és el que controla la majoria de l'aparença d'una aplicació QtWidgets. Això és necessari a la nostra aplicació QtQuick perquè inicialitzem l'aplicació amb QApplication (tradicionalment usada amb QtWidgets).
D'altra banda, un estil dels Qt Quick Controls controla la majoria de l'aparença d'una aplicació QtQuick. Això afecta com es veuran els controls QML. L'estil de KDE org.kde.desktop (altrament conegut com a qqc2-desktop-style) és especial i intenta eliminar la duplicació derivant elements estilístics del QStyle de l'aplicació (per això s'utilitza una QApplication). D'aquesta manera, les aplicacions QtWidgets i QtQuick poden veure's majoritàriament de la mateixa manera i reutilitzar components d'estil.
Les aplicacions QtQuick / Kirigami necessiten establir-ho en el codi C++. Per establir el QStyle, s'ha d'afegir en dos llocs.
En Craft:
def setDependencies(self):
self.runtimeDependencies["kde/plasma/breeze"] = NoneI en C++:
QApplication::setStyle("breeze");Això és el que s'utilitza a la guia d'aprenentatge del Kirigami. Altrament, podeu carregar l'estil Brisa només al Windows, on això és més rellevant utilitzant un «ifdef»:
#ifdef Q_OS_WIN
QApplication::setStyle("breeze");
#endifL'estil Qt Quick Controls s'ha d'afegir en tres llocs.
En Craft:
def setDependencies(self):
self.runtimeDependencies["kde/frameworks/tier3/qqc2-desktop-style"] = NoneEn C++, on cal que sigui condicional:
if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE"))
{
QQuickStyle::setStyle("org.kde.desktop");
}I opcionalment en el CMake, d'una entre dues maneres:
find_package(KF6 REQUIRED COMPONENTS QQC2DesktopStyle)
# or
ecm_find_qmlmodule(org.kde.desktop REQUIRED)Com que és una dependència en temps d'execució, no cal establir-la al CMake que s'utilitza en temps de compilació. No obstant això, això pot indicar a si mateix i als altres si l'entorn és correcte i serà capaç d'executar l'aplicació resultant, permetent-vos trobar amb més facilitat els paquets que falten o les configuracions errònies.
L'ordre find_package() cerca específicament qqc2-desktop-style als fitxers de configuració del CMake, mentre que ecm_find_qmlmodule() és menys estricte i només cerca el mòdul QML. Aquest últim requereix que inclogueu ECMFindQmlModule:
include(ECMFindQmlModule)Distribució d'icones
El primer que cal per a fer que l'aplicació utilitzi les icones Brisa és incloure KIconThemes en el projecte.
Després d'això, es necessiten algunes ordres del CMake per afegir la icona de l'aplicació a l'aplicació.
KIconThemes
Això es pot fer amb els tres passos següents:
- Afegir-la com a dependència al Craft:
def setDependencies(self):
self.runtimeDependencies["kde/frameworks/tier3/kiconthemes"] = None- Afegir-la com a dependència al CMake:
find_package(KF6 REQUIRED COMPONENTS IconThemes)
# ...
target_link_libraries(myapp
PRIVATE
# ...
KF6::IconThemes
)- Usant-la al codi C++, en el fitxer
main.cpp:
#include <KIconTheme>
// ...
int main(int argc, char* argv[])
{
KIconTheme::initTheme();
QApplication app(argc, argv);
// ...
}Tingueu en compte que encara que el nom del projecte i la crida al CMake fan servir el plural (KIconThemes, KF6IconThemes), la crida C++ fa servir el singular (KIconTheme).
Cal inicialitzar KIconThemes abans de l'aplicació.
Icona de l'aplicació
Si l'aplicació té una icona, s'ha d'afegir al vostre projecte tant com un recurs QML i com a part de la instal·lació d'icones.
Habitualment al Linux, la icona de l'aplicació es pot instal·lar al directori correcte, i l'aplicació recuperarà la icona quan sigui necessari. Normalment, la icona de l'aplicació consisteix en una icona SVG primària, aparellada amb diverses mides d'icones PNG.
La instal·lació de la icona SVG es fa així en el CMake:
install(FILES ${PROJECT_SOURCE_DIR}/icons/org.kde.myapp.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps)I la instal·lació de les icones PNG es fa així:
ecm_install_icons(ICONS
16-apps-myapp.png
24-apps-myapp.png
32-apps-myapp.png
48-apps-myapp.png
64-apps-myapp.png
128-apps-myapp.png
256-apps-myapp.png
512-apps-myapp.png
DESTINATION share/icons)Quan s'instal·la la icona de l'aplicació al Linux, una icona PNG com 48-apps-myapp.png goes to ${INSTALL_PREFIX}/share/icons/hicolor/48x48/apps/myapp.png, i una icona SVG va a ${INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/org.kde.myapp.svg, on ${INSTALL_PREFIX} normalment significa /usr, /usr/local o ~/.local. Tingueu en compte com en el cas dels PNG que el nom de la icona es tradueix al camí que tindrà en el sistema de fitxers.
Podeu llegir més sobre la instal·lació de fitxers a Construir manualment el programari de KDE: El pas d'instal·lació.
Una vegada instal·lada la icona d'aquesta manera, en codi QML, es pot cridar simplement amb myapp o org.kde.myapp, com es cridaria des de QIcon::fromTheme(). Això es pot utilitzar amb qualsevol control QML que tingui una propietat icon.name.
El Windows no té aquest directori estàndard, i la instal·lació de la icona no té cap efecte; s'ha d'empaquetar amb l'aplicació. Per a fer-ho, el PNG es pot enviar al seu propi directori d'instal·lació utilitzant ecm_add_app_icon() i un fitxer PNG o SVG es pot incrustar a l'aplicació com un fitxer de recursos Qt a ecm_add_qml_module() o ecm_target_qml_sources().
La icona de l'aplicació PNG s'instal·la amb:
ecm_add_app_icon(myapp ICONS ${PROJECT_SOURCE_DIR}/icons/256-apps-myapp.png)I la icona principal de l'aplicació s'empaqueta com a recurs Qt amb:
ecm_add_qml_module(myapp URI org.kde.myapp)
ecm_target_qml_sources(myapp SOURCES Main.qml RESOURCES ../icons/org.kde.myapp.svg)Això farà que la icona de l'aplicació estigui disponible com a recurs Qt a qrc:/qt/qml/org/kde/myapp/org.kde.myapp.svg. Això es pot utilitzar amb qualsevol control QML que tingui una propietat icon.source.
El camí RESOURCES depèn del lloc on es trobin les icones. Tradicionalment, es crea una carpeta icons/ a l'arrel del projecte per a emmagatzemar totes les icones, ja que realment no compten com a fitxers de codi font.
Després d'instal·lar les icones (per al Linux) i empaquetades (per al Windows i l'Android), podeu definir-les al codi. Al codi QML, per a la compatibilitat amb el Windows i l'Android, hauríeu d'utilitzar la icona empaquetada; en el codi C++, especialment quan establiu la icona de la finestra, podeu utilitzar la icona del tema predeterminat i la icona empaquetada com a alternativa amb QIcon::fromTheme() a la crida a QGuiApplication::setWindowIcon():
QGuiApplication::setWindowIcon(QIcon::fromTheme("org.kde.myapp", QIcon(":/qt/qml/org/kde/myapp/org.kde.myapp.svg")));Icones del Kirigami
Tot i que el Windows no té un directori estàndard on instal·lar icones des d'un tema d'icones, és possible afegir les icones Brisa necessàries juntament amb la vostra aplicació Windows.
Això ho fa el Craft automàticament quan KIconThemes està configurat correctament per al projecte i les icones Breeze s'inclouen com a dependència en el projecte.
Per a configurar KIconThemes, vegeu la secció anterior KIconThemes.
Per a afegir les icones Brisa com a dependència del vostre projecte, afegiu-ho al vostre esquema de Craft:
def setDependencies(self):
# ...
self.runtimeDependencies["kde/frameworks/tier1/breeze-icons"] = NoneD'aquesta manera, no necessitareu empaquetar manualment cap icona del Brisa a la vostra aplicació com a recurs: podeu utilitzar un nom QIcon::fromTheme(), com ara kde o application-exit-symbolic.
Construcció
Per a construir la vostra aplicació al Windows, seguiu Construir el programari KDE al Windows amb Craft: Construcció dels projectes propis al Windows.
Construccions de CI
Si el projecte s'ha configurat correctament per a construir al Windows i està utilitzant la infraestructura KDE per al seu allotjament de codi (KDE Invent), és possible configurar els treballs CI/CD del Windows.
Per a fer-ho, haureu d'afegir les plantilles CI rellevants del Windows amb un fitxer .gitlab-ci.yaml i llistar les vostres dependències en un fitxer .kde-ci.yaml com s'ha esmentat al Sistema d'integració contínua.
Solució de problemes
Si teniu problemes per a adaptar la vostra aplicació al Windows, podeu visitar les sales següents a Matrix: