Nastavenie pre Windows
Úvod
Qt má výbornú podporu systému Windows, a preto aplikácie využívajúce Qt a extra-cmake-modules od KDE nebudú vyžadovať veľa úprav na správne fungovanie v systéme Windows.
Sú potrebné tri veci:
Blueprint Craft je potrebný na zbalenie všetkých závislostí spolu s aplikáciou na vygenerovanie spustiteľného súboru.
Direktíva preprocesora #ifdef Q_OS_WIN sa dá použiť na napísanie kódu, ktorý sa použije iba pri zostavení aplikácie v systéme Windows. To je potrebné aspoň raz na vynútenie štýlu Breeze pre aplikáciu, aby dobre vyzerala v systéme Windows, ale v závislosti od aplikácie to môže vyžadovať viac.
Zbalenie potrebných ikon, aby aplikácia fungovala v systéme Windows, je najzložitejší krok, ale extra-cmake-modules (ECM) od KDE aj Qt poskytujú prostriedky na uľahčenie tejto práce.
Plán Craft
Na začiatok musíte najprv nasledovať Zostavenie softvéru KDE v systéme Windows s Craft, aby ste získali funkčný blueprint Craft a mohli aspoň zostaviť vašu aplikáciu v systéme Windows.
Keď budete schopní zostaviť projekt, dostanete chyby kompilácie a behu, ktoré vám pomôžu opraviť akékoľvek problémy s kompatibilitou so systémom Windows.
Štýl Breeze
Tutoriál Kirigami by mal byť už väčšinou kompatibilný so systémom Windows, ale kroky potrebné na dosiahnutie tohto musia byť uvedené explicitne.
Dve úpravy, ktoré by sa mali urobiť na zabezpečenie použitia štýlu Breeze, sú nastavenie QStyle na breeze a nastavenie štýlu Qt Quick Controls na org.kde.desktop.
QStyle je to, čo ovláda väčšinu vzhľadu aplikácie QtWidgets. To je potrebné v našej aplikácii QtQuick, pretože inicializujeme aplikáciu pomocou QApplication (tradične používanej s QtWidgets).
Štýl Qt Quick Controls na druhej strane ovláda väčšinu vzhľadu aplikácie QtQuick. Toto ovplyvňuje, ako budú QML ovládacie prvky vyzerať. Štýl org.kde.desktop od KDE (inak známy ako qqc2-desktop-style) je špeciálny a pokúša sa odstrániť duplicitu odvodením štýlových prvkov z QStyle aplikácie (preto sa používa QApplication). Takto môžu aplikácie QtWidgets a QtQuick väčšinou vyzerať rovnako a znovu používať štýlové komponenty.
Aplikácie QtQuick / Kirigami musia nastaviť oboje v kóde C++. Na nastavenie QStyle ho treba pridať na dvoch miestach.
V Craft:
def setDependencies(self):
self.runtimeDependencies["kde/plasma/breeze"] = NoneA v C++:
QApplication::setStyle("breeze");Toto sa používa v tutoriáli Kirigami. Prípadne môžete načítať štýl Breeze iba v systéme Windows, kde je to najrelevantnejšie, pomocou ifdef:
#ifdef Q_OS_WIN
QApplication::setStyle("breeze");
#endifŠtýl Qt Quick Controls sa musí pridať na troch miestach.
V Craft:
def setDependencies(self):
self.runtimeDependencies["kde/frameworks/tier3/qqc2-desktop-style"] = NoneV C++, kde to musí byť podmienené:
if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE"))
{
QQuickStyle::setStyle("org.kde.desktop");
}A voliteľne v CMake, jedným z dvoch spôsobov:
find_package(KF6 REQUIRED COMPONENTS QQC2DesktopStyle)
# or
ecm_find_qmlmodule(org.kde.desktop REQUIRED)Keďže je to závislosti v čase behu, nie je potrebné nastaviť ju v CMake, ktorý sa používa v čase kompilácie. Avšak toto môže signalizovať vám aj ostatným, či je prostredie správne a bude schopné spustiť výslednú aplikáciu, čím vám umožní ľahšie nájsť chýbajúce balíky alebo nesprávne konfigurácie.
Príkaz find_package() špecificky hľadá konfiguračné súbory CMake pre qqc2-desktop-style, zatiaľ čo ecm_find_qmlmodule() je menej striktný a hľadá iba QML modul. Ten druhý vyžaduje, aby ste zahrnuli ECMFindQmlModule:
include(ECMFindQmlModule)Dodávanie ikon
Prvá vec, ktorú je potrebné urobiť, aby aplikácia používala ikony Breeze, je zahrnúť KIconThemes do vášho projektu.
Potom sú potrebné niektoré CMake príkazy na zbalenie ikony vašej aplikácie s aplikáciou.
Téma
Toto je možné urobiť v nasledujúcich troch krokoch:
- Pridanie ako závislosti v Craft:
def setDependencies(self):
self.runtimeDependencies["kde/frameworks/tier3/kiconthemes"] = None- Pridanie ako závislosti v CMake:
find_package(KF6 REQUIRED COMPONENTS IconThemes)
# ...
target_link_libraries(myapp
PRIVATE
# ...
KF6::IconThemes
)- Použitie v C++ kóde, v súbore
main.cpp:
#include <KIconTheme>
// ...
int main(int argc, char* argv[])
{
KIconTheme::initTheme();
QApplication app(argc, argv);
// ...
}Všimnite si, že hoci názov projektu a volanie CMake používajú množné číslo (KIconThemes, KF6IconThemes), volanie C++ používa jednotné číslo (KIconTheme).
KIconThemes je potrebné inicializovať pred aplikáciou.
Ikona aplikácie
Ak má vaša aplikácia ikonu, musí byť pridaná do vášho projektu ako QML zdroj aj ako súčasť inštalácie ikon.
Bežne v Linuxe sa ikona aplikácie môže jednoducho nainštalovať do správneho adresára a ikona bude aplikáciou načítaná, keď je to potrebné. Zvyčajne ikona aplikácie pozostáva z primárnej SVG ikony, spárovanej s viacerými veľkosťami PNG ikon.
Inštalácia ikony SVG sa v CMake robí takto:
install(FILES ${PROJECT_SOURCE_DIR}/icons/org.kde.myapp.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps)A inštalácia ikon PNG sa robí takto:
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)Keď sa ikona aplikácie nainštaluje v Linuxe, PNG ikona ako 48-apps-myapp.png ide do ${INSTALL_PREFIX}/share/icons/hicolor/48x48/apps/myapp.png a SVG ikona ide do ${INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/org.kde.myapp.svg, kde ${INSTALL_PREFIX} zvyčajne znamená /usr, /usr/local alebo ~/.local. Všimnite si, ako sa v prípade PNG názov ikony premietne do cesty, ktorú bude mať v súborovom systéme.
Viac o inštalácii súborov si môžete prečítať v časti Manuálne zostavenie softvéru KDE: Krok inštalácie.
Keď je ikona nainštalovaná týmto spôsobom, v QML kóde sa dá jednoducho zavolať pomocou myapp alebo org.kde.myapp, ako by sa volalo z QIcon::fromTheme(). Toto sa dá použiť s akýmkoľvek QML ovládacím prvkom, ktorý má vlastnosť icon.name.
Windows nemá taký štandardný adresár a inštalácia ikony nemá žiadny efekt; musí byť zbalená s aplikáciou. Na to sa PNG môže odoslať do vlastného inštalačného adresára pomocou ecm_add_app_icon() a PNG alebo SVG súbor sa dá vložiť do aplikácie ako súbor zdrojov Qt v ecm_add_qml_module() alebo ecm_target_qml_sources().
Ikona aplikácie PNG sa inštaluje pomocou:
ecm_add_app_icon(myapp ICONS ${PROJECT_SOURCE_DIR}/icons/256-apps-myapp.png)A hlavná ikona aplikácie je zbalená ako Qt zdroj pomocou:
ecm_add_qml_module(myapp URI org.kde.myapp)
ecm_target_qml_sources(myapp SOURCES Main.qml RESOURCES ../icons/org.kde.myapp.svg)Tým sa ikona aplikácie sprístupní ako Qt zdroj pod qrc:/qt/qml/org/kde/myapp/org.kde.myapp.svg. Toto sa dá použiť s akýmkoľvek QML ovládacím prvkom, ktorý má vlastnosť icon.source.
Cesta RESOURCES závisí od miesta, kde sa ikony nachádzajú. Tradične sa v koreňovom adresári projektu vytvára priečinok icons/ na uloženie všetkých ikon, pretože sa skutočne nepočítajú ako zdrojové súbory.
Po nainštalovaní ikon (pre Linux) a ich zbalení (pre Windows a Android) ich môžete nastaviť v kóde. V QML kóde by ste pre kompatibilitu so systémami Windows aj Android mali použiť zbalenú ikonu; v C++ kóde, najmä pri nastavovaní ikony okna, môžete predvolene použiť ikonu témy a zbalenú ikonu ako záložnú pomocou QIcon::fromTheme() vo volaní QGuiApplication::setWindowIcon():
QGuiApplication::setWindowIcon(QIcon::fromTheme("org.kde.myapp", QIcon(":/qt/qml/org/kde/myapp/org.kde.myapp.svg")));Jednotka Kirigami
Aj keď systém Windows nemá štandardný adresár, kam inštalovať ikony z témy ikon, je možné zbaliť potrebné ikony Breeze spolu s vašou aplikáciou pre Windows.
Toto sa vykonáva automaticky pomocou Craft, keď je KIconThemes správne nastavené pre projekt a ikony Breeze sú zahrnuté ako závislosť vo vašom projekte.
Na nastavenie KIconThemes pozrite vyššie uvedenú sekciu KIconThemes.
Na pridanie ikon Breeze ako závislosti pre váš projekt pridajte toto do vášho blueprintu Craft:
def setDependencies(self):
# ...
self.runtimeDependencies["kde/frameworks/tier1/breeze-icons"] = NoneTakto nebudete musieť manuálne zbaliť žiadne ikony Breeze do vašej aplikácie ako zdroj: môžete jednoducho použiť názov QIcon::fromTheme(), ako napríklad kde alebo application-exit-symbolic.
Verzia profilu
Na zostavenie vašej aplikácie v systéme Windows nasledujte Zostavenie softvéru KDE v systéme Windows s Craft: Zostavenie vlastných projektov v systéme Windows.
Zostavenia CI
Ak bol projekt správne nakonfigurovaný na zostavenie v systéme Windows a používa infraštruktúru KDE na hosťovanie kódu (KDE Invent), je možné nakonfigurovať CI/CD úlohy pre Windows.
Na to budete musieť pridať príslušné CI šablóny pre Windows so súborom .gitlab-ci.yaml a uviesť vaše závislosti v súbore .kde-ci.yaml, ako je uvedené v časti Systém kontinuálnej integrácie.
Riešenie problémov
Ak máte problémy s prispôsobením vašej aplikácie pre Windows, môžete navštíviť nasledujúce miestnosti na Matrix: