Nastavitev za Windows
Uvod
Qt ima odlično podporo za Windows, zato aplikacije, ki uporabljajo module [extra-cmake-modules] (https://api.kde.org/ecm/) Qt in KDE, ne bodo potrebovale veliko sprememb za pravilno delovanje v sistemu Windows.
Potrebne so tri stvari:
Craft blueprint je potreben za združevanje vseh odvisnosti skupaj z aplikacijo za ustvarjanje izvedljive datoteke.
Direktivo predprocesorja #ifdef Q_OS_WIN je mogoče uporabiti za pisanje kode, ki bo veljala le, če je aplikacija zgrajena v sistemu Windows. To je potrebno vsaj enkrat za vsiljenje sloga Sapica (Breeze) aplikaciji, da bo v sistemu Windows videti dobro, vendar je odvisno od aplikacije morda potrebnih več.
Združevanje potrebnih ikon za delovanje aplikacije v sistemu Windows je najzahtevnejši korak, vendar tako KDE-jevi dodatni moduli cmake (ECM) kot Qt ponujajo načine za olajšanje tega dela.
Craft blueprint
Za začetek morate najprej slediti navodilom Gradnja programske opreme KDE v sistemu Windows s programom Craft, da dobite delujoč Craft blueprint in boste lahko vsaj zgradili svojo aplikacijo v sistemu Windows.
Ko boste lahko sestavili projekt, boste dobili napake pri prevajanju in izvajanju, ki vam bodo pomagale odpraviti morebitne težave z združljivostjo sistema Windows.
Slog Sapica (Breeze)
Učbenik za Kirigami bi moral biti večinoma že združljiv z operacijskim sistemom Windows, vendar je treba korake, potrebne za dosego tega, jasno navesti.
Za zagotovitev uporabe sloga Sapica je treba narediti dve spremembi: nastaviti QStyle na breeze in nastaviti slog hitrih kontrolnikov Qt na org.kde.desktop.
QStyle nadzoruje večino videza aplikacije QtWidgets. To je potrebno v naši aplikaciji QtQuick, ker aplikacijo inicializiramo z QApplication (tradicionalno uporabljeno s QtWidgets).
Slog Qt Quick Controls pa nadzoruje večino videza aplikacije QtQuick. To vpliva na to, kako bodo videti kontrolniki QML. KDE-jev slog org.kde.desktop (znan tudi kot qqc2-desktop-style) je poseben in poskuša odstraniti podvajanje z izpeljavo slogovnih elementov iz QStyle aplikacije (zato se uporablja QApplication). Na ta način so lahko aplikacije QtWidgets in QtQuick večinoma videti enako in ponovno uporabljajo slogovne komponente.
Aplikacije QtQuick / Kirigami morajo oboje nastaviti v kodi C++. Za nastavitev QStyle ga je treba dodati na dveh mestih.
V Craftu:
def setDependencies(self):
self.runtimeDependencies["kde/plasma/breeze"] = NoneIn v C++:
QApplication::setStyle("breeze");To se uporablja v učbeniku za Kirigami. Sicer lahko slog Breeze naložite le v sistemu Windows, kjer je to najbolj pomembno, z uporabo ukaza ifdef:
#ifdef Q_OS_WIN
QApplication::setStyle("breeze");
#endifSlog hitrih kontrolnikov Qt je treba dodati na treh mestih.
V Craftu:
def setDependencies(self):
self.runtimeDependencies["kde/frameworks/tier3/qqc2-desktop-style"] = NoneV C++, kjer mora biti pogojno:
if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE"))
{
QQuickStyle::setStyle("org.kde.desktop");
}In po izbiri v CMake, na enega od dveh načinov:
find_package(KF6 REQUIRED COMPONENTS QQC2DesktopStyle)
# or
ecm_find_qmlmodule(org.kde.desktop REQUIRED)Ker gre za odvisnost med izvajanjem, je ni treba nastaviti v CMake, ki se uporablja med prevajanjem. Vendar pa lahko to vam in drugim sporoči, ali je okolje pravilno in ali bo mogoče zagnati nastalo aplikacijo, kar vam omogoča lažje iskanje manjkajočih paketov ali napačnih konfiguracij.
Ukaz find_package() posebej išče datoteke konfiguracije CMake za qqc2-desktop-style, medtem ko je ecm_find_qmlmodule() manj strog in išče le modul QML. Slednji zahteva, da vključite ECMFindQmlModule:
include(ECMFindQmlModule)Dobavljanje ikon
Prva stvar, ki jo potrebujete, da aplikacija uporablja ikone Breeze, je, da v svoj projekt vključite KIconThemes.
Po tem je potrebnih nekaj ukazov CMake, da se ikona aplikacije poveže z aplikacijo.
KIconThemes
To je mogoče storiti z naslednjimi tremi koraki:
- Dodajanje kot odvisnosti v Craft:
def setDependencies(self):
self.runtimeDependencies["kde/frameworks/tier3/kiconthemes"] = None- Dodajanje kot odvisnosti v CMake:
find_package(KF6 REQUIRED COMPONENTS IconThemes)
# ...
target_link_libraries(myapp
PRIVATE
# ...
KF6::IconThemes
)- Uporaba v kodi C++, v datoteki
main.cpp:
#include <KIconTheme>
// ...
int main(int argc, char* argv[])
{
KIconTheme::initTheme();
QApplication app(argc, argv);
// ...
}Upoštevajte, da čeprav ime projekta in klic CMake uporablja množino (KIconThemes, KF6IconThemes), klic C++ uporablja ednino (KIconTheme).
KIconThemes je treba inicializirati pred uporabo aplikacije.
Ikona aplikacije
Če ima vaša aplikacija ikono, jo je treba dodati v vaš projekt tako kot vir QML kot tudi kot del namestitve ikone.
Običajno je v Linuxu ikono aplikacije mogoče preprosto namestiti v pravilen imenik, aplikacija pa jo bo po potrebi pridobila. Ikona aplikacije je običajno sestavljena iz primarne ikone SVG, povezane z ikonami več velikosti PNG.
Namestitev ikone SVG se v CMake izvede takole:
install(FILES ${PROJECT_SOURCE_DIR}/icons/org.kde.myapp.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps)Namestitev ikon PNG pa se izvede takole:
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)Ko je ikona aplikacije nameščena v Linuxu, se ikona PNG, kot je 48-apps-myapp.png, premakne v ${INSTALL_PREFIX}/share/icons/hicolor/48x48/apps/myapp.png, ikona SVG pa v ${INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/org.kde.myapp.svg, kjer ${INSTALL_PREFIX} običajno pomeni /usr, /usr/local ali ~/.local. Upoštevajte, kako se v primeru PNG-jev ime ikone prevede v pot, ki jo bo imela v datotečnem sistemu.
Več o nameščanju datotek si lahko preberete v Ročna gradnja programske opreme KDE: Korak namestitve.
Ko je ikona nameščena na ta način, jo lahko v kodi QML preprosto pokličete z myapp ali org.kde.myapp, kot bi jo poklicali iz QIcon::fromTheme(). To se lahko uporablja s katerim koli kontrolnikom QML, ki ima lastnost icon.name.
Windows nima takšnega standardnega imenika in namestitev ikone nima učinka; mora biti priložena aplikaciji. Če želite to narediti, lahko PNG pošljete v njegov namestitveni imenik z uporabo ecm_add_app_icon(), datoteko PNG ali SVG pa lahko vdelate v aplikacijo kot datoteko virov Qt v ecm_add_qml_module() ali ecm_target_qml_sources().
Ikona aplikacije PNG je nameščena z:
ecm_add_app_icon(myapp ICONS ${PROJECT_SOURCE_DIR}/icons/256-apps-myapp.png)Glavna ikona aplikacije je združena kot vir Qt z:
ecm_add_qml_module(myapp URI org.kde.myapp)
ecm_target_qml_sources(myapp SOURCES Main.qml RESOURCES ../icons/org.kde.myapp.svg)S tem bo ikona aplikacije na voljo kot vir Qt pod qrc:/qt/qml/org/kde/myapp/org.kde.myapp.svg. To se lahko uporablja s katerim koli kontrolnikom QML, ki ima lastnost icon.source.
Pot RESOURCES je odvisna od mesta, kjer se nahajajo ikone. Tradicionalno se v korenu projekta ustvari mapa icons/ za shranjevanje vseh ikon, saj se v resnici ne obravnavajo kot izvorne datoteke.
Ko so ikone nameščene (za Linux) in združene (za Windows in Android), jih lahko nastavite v kodi. V kodi QML morate za združljivost z operacijskim sistemom Windows in Android uporabiti združeno ikono; v kodi C++, zlasti pri nastavljanju ikone okna, lahko privzeto uporabite ikono teme in združeno ikono kot rezervno možnost z QIcon::fromTheme() v klicu QGuiApplication::setWindowIcon():
QGuiApplication::setWindowIcon(QIcon::fromTheme("org.kde.myapp", QIcon(":/qt/qml/org/kde/myapp/org.kde.myapp.svg")));Ikone Kirigami
Čeprav Windows nima standardnega imenika, kamor bi namestili ikone iz teme ikon, je mogoče potrebne ikone Breeze združiti z vašo aplikacijo Windows.
To Craft izvede samodejno, ko je KIconThemes pravilno nastavljen za projekt in so ikone Breeze vključene kot odvisnost v vašem projektu.
Za nastavitev KIconThemes glejte zgornji razdelek KIconThemes.
Če želite dodati ikone Breeze kot odvisnost za svoj projekt, dodajte tole v svoj Craft blueprint:
def setDependencies(self):
# ...
self.runtimeDependencies["kde/frameworks/tier1/breeze-icons"] = NoneNa ta način vam ne bo treba ročno vključevati ikon Breeze v svojo aplikacijo kot vir: preprosto lahko uporabite ime QIcon::fromTheme(), na primer kde ali application-exit-symbolic.
Izgradnja
Če želite zgraditi svojo aplikacijo v sistemu Windows, sledite navodilom Gradnja programske opreme KDE v sistemu Windows s programom Craft: Gradnja lastnih projektov v sistemu Windows.
Izgradnje CI
Če je bil projekt pravilno konfiguriran za gradnjo v sistemu Windows in uporablja infrastrukturo KDE za gostovanje kode (KDE Invent), je mogoče konfigurirati opravila Windows CI/CD.
Če želite to narediti, boste morali dodati ustrezne predloge CI za Windows z datoteko .gitlab-ci.yaml in navesti svoje odvisnosti v datoteki .kde-ci.yaml, kot je omenjeno v Continuous Integration System.
Odpravljanje težav
Če imate težave s prilagajanjem aplikacije za Windows, lahko obiščete naslednje sobe na Matrixu: