Jednotka Kirigami
Inštalácia Kirigami
Pred začiatkom budeme musieť nainštalovať Kirigami a Rust na náš počítač.
sudo pacman -S cargo cmake extra-cmake-modules kirigami breeze qqc2-desktop-style | |
sudo zypper install cargo cmake kf6-extra-cmake-modules kf6-kirigami-devel qt6-quickcontrols2-devel kf6-qqc2-desktop-style | |
sudo dnf install cargo cmake extra-cmake-modules kf6-kirigami2-devel kf6-qqc2-desktop-style |
Ďalšie informácie pre ostatné distribúcie nájdete v časti Inštalácia závislostí na zostavenie.
Štruktúra projektu
Najprv vytvoríme priečinok nášho projektu (môžete použiť nižšie uvedené príkazy). Náš budeme volať kirigami_rust/. Toto bude štruktúra projektu:
kirigami_rust/
├── CMakeLists.txt
├── Cargo.toml
├── build.rs
├── org.kde.kirigami_rust.desktop
└── src/
├── main.rs
└── qml/
└── Main.qmlTento projekt bude na volanie Cargo používať CMake, ktoré zase zostaví projekt.
O CMake a Cargo
Toto nie je tradičný spôsob zostavenia projektu Rust: technicky je na jeho zostavenie potrebné iba Cargo, zvyčajne s cargo build a cargo run.
Pre desktopové aplikácie je však potrebné CMake (alebo ekvivalent ako Meson používaný GNOME alebo Just používaný COSMIC) na inštaláciu, pretože Cargo nemá potrebné funkcie na inštaláciu GUI desktopových aplikácií.
Projekt sa bude volať kirigami_rust a vygeneruje spustiteľný súbor nazývaný kirigami_hello.
💡 Tip
Túto štruktúru súborov môžete rýchlo vytvoriť pomocou:mkdir -p kirigami_rust/src/qml/.org.kde.kirigami_rust.desktop
Primárnym účelom súborov Desktop Entry je zobraziť vašu aplikáciu v spúšťači aplikácií v Linuxe. Ďalším dôvodom mať ich je mať ikony okien na Waylande, pretože sú potrebné na to, aby povedali kompozitoru "toto okno patrí k tejto ikone".
Musí nasledovať schému pomenovania s obráteným DNS s príponou .desktop, ako napríklad org.kde.kirigami_rust.desktop:
| |
CMakeLists
Súbor CMakeLists.txt bude použitý na spustenie Cargo a na inštaláciu potrebných súborov spolu s našou aplikáciou. Tiež poskytuje určité vylepšenia kvality života, ako napríklad zabezpečenie, že Kirigami je nainštalované počas kompilácie a signalizovanie distribúciám Linux, aby nainštalovali potrebné závislosti s aplikáciou.
| |
Prvá vec, ktorú robíme, je pridanie Extra CMake Modules (ECM) od KDE do nášho projektu, aby sme mohli použiť ecm_find_qml_module na kontrolu, či je Kirigami nainštalované pri pokuse o zostavenie aplikácie, a ak nie, okamžite zlyhať. Ďalšou užitočnou funkciou ECM je ECMUninstallTarget, ktorý umožňuje jednoducho odinštalovať aplikáciu pomocou CMake, ak je to žiaduce.
Tiež používame find_package() z CMake, aby sme sa uistili, že máme qqc2-desktop-style, QML štýl KDE pre pracovnú plochu. Toto je jeden z dvoch dôvodov, prečo v tomto tutoriáli používame CMake.
Typicky sa projekty Rust zostavujú pomocou Cargo a tu to nebude iné. Vytvoríme cieľ, ktorý jednoducho spustí Cargo pri spustení, a označíme ho ALL, aby sa zostavoval predvolene. Cargo zostaví spustiteľný súbor vnútri binárneho adresára CMake (typicky build/).
Viac informácií o CMake, cieľoch a binárnom adresári nájdete v časti Manuálne zostavenie softvéru KDE.
Potom jednoducho nainštalujeme spustiteľný súbor kirigami_rust vygenerovaný Cargo v binárnom adresári a nainštalujeme ho do BINDIR, čo je zvyčajne /usr/bin, /usr/local/bin alebo ~/.local/bin. Tiež nainštalujeme potrebný súbor desktop do APPDIR, čo je zvyčajne /usr/share/applications alebo ~/.local/share/applications. Toto je druhý dôvod, prečo v tomto tutoriáli používame CMake.
Viac informácií o tom, kam sa inštaluje softvér KDE, nájdete v časti Manuálne zostavenie softvéru KDE: Krok inštalácie.
Teraz, keď sme sa postarali o CMake, pozrime sa na súbory, s ktorými budeme tráviť väčšinu nášho času.
Cargo.toml
Ďalej máme veľmi jednoduchý Cargo.toml:
| |
Pozostáva z metadát projektu a zoznamu závislostí, ktoré bude Cargo automaticky sťahovať, konkrétne cxx a cxx-qt, ktoré sú potrebné na spúšťanie aplikácií Qt napísaných v Rust.
build.rs
Kde by ste v C++ typicky registrovali QML prvky pomocou QML_ELEMENT a ecm_add_qml_module pomocou deklaratívnej registrácie, v Rust to budete musieť deklarovať v súbore zostavovacieho skriptu build.rs:
| |
Toto je potrebné na sprístupnenie QML súboru vo vstupnom bode našej aplikácie, main.rs.
src/main.rs
Súbor kirigami_rust/src/main.rs inicializuje projekt a potom načíta QML súbor, ktorý bude tvoriť používateľské rozhranie aplikácie.
| |
Prvá časť, ktorá je označená Rust makrom #[cxx_qt::bridge], jednoducho vytvorí figurantový QObject z figurantovej Rust štruktúry. Toto je potrebné len na doplnenie použitia QmlModule v predchádzajúcom zostavovacom skripte build.rs. Toto bude mať väčšiu úlohu v budúcom tutoriáli, ktorý učí, ako vystaviť Rust kód do QML, ale zatiaľ to môžete ignorovať.
Potom začína dôležitá časť:
Riadky 12-13 importujú potrebné Qt knižnice vystavené cez cxx-qt.
Najprv vytvoríme novú inštanciu QApplication, potom vykonáme niekoľko integrácií v riadkoch 20-26.
Potom prichádza časť, ktorá skutočne vytvára okno aplikácie:
| |
Dlhé URL qrc:/qt/qml/org/kde/tutorial/src/qml/Main.qml zodpovedá súboru Main.qml podľa systému zdrojov Qt a nasleduje túto schému: <resource_prefix><import_URI><QML_dir><file>.
Inými slovami: predvolený prefix zdrojov qrc:/qt/qml/ + import URI org/kde/tutorial (nastavené v build.rs, oddelené lomkami namiesto bodiek) + QML adresár src/qml/ + QML súbor Main.qml.
src/qml/Main.qml
| |
Tu budeme spracovávať frontend našej aplikácie.
Ak poznáte trochu Javascript, potom sa vám veľa z QML bude zdať povedomé (aj keď má svoje zvláštnosti). Dokumentácia Qt má rozsiahle množstvo materiálu o tomto jazyku, ak chcete skúsiť niečo na vlastnú päsť. V priebehu týchto tutoriálov sa zameriame veľkú časť pozornosti na náš QML kód, kde môžeme využiť Kirigami na maximum.
Zatiaľ sa zameriame na Main.qml. Najprv importujeme niekoľko dôležitých modulov:
- QtQuick, štandardná knižnica používaná v aplikáciách QML.
- QtQuick Controls, ktorá poskytuje množstvo štandardných ovládacích prvkov, ktoré môžeme použiť na interaktívnosť našich aplikácií.
- QtQuick Layouts, ktorá poskytuje nástroje na umiestňovanie komponentov v rámci okna aplikácie.
- Kirigami, ktorá poskytuje množstvo komponentov vhodných na vytváranie aplikácií fungujúcich na zariadeniach rôznych tvarov a veľkostí.
Poznámka
Umiestnenie importov QtQuick Controls a Kirigami do samostatných menných priestorov pomocou kľúčového slovaas je osvedčený postup, ktorý zabezpečuje, že žiadne komponenty s rovnakým názvom nemôžu kolidovať. V praxi môžete vidieť rôzne názvy pre QtQuick Controls, ako napríklad "QQC" alebo "QQC2". V tomto tutoriáli budeme pre prehľadnosť používať "Controls".Potom sa dostávame k nášmu základnému prvku, Kirigami.ApplicationWindow, ktorý poskytuje niektoré základné funkcie potrebné pre všetky aplikácie Kirigami. Toto je okno, ktoré bude obsahovať každú z našich stránok, hlavné sekcie nášho UI.
Potom nastavíme vlastnosť id okna na "root". ID sú užitočné, pretože nám umožňujú jednoznačne odkazovať na komponent, aj keď máme niekoľko rovnakého typu.
Tiež nastavíme vlastnosť title okna na "Hello World".
Potom nastavíme prvú stránku nášho zásobníka stránok. Väčšina aplikácií Kirigami je organizovaná ako zásobník stránok, pričom každá stránka obsahuje súvisiace komponenty vhodné pre konkrétnu úlohu. Zatiaľ to udržujeme jednoduché a zostávame pri jednej stránke. pageStack je pôvodne prázdny zásobník stránok poskytovaný Kirigami.ApplicationWindow a pomocou pageStack.initialPage: Kirigami.Page {...} nastavíme prvú stránku prezentovanú pri načítaní aplikácie na Kirigami.Page. Táto stránka bude obsahovať všetok náš obsah.
Nakoniec zahrnieme na našu stránku Controls.Label, ktorý nám umožní umiestniť text na stránku. Používame anchors.centerIn: parent na vycentrovanie nášho popisku horizontálne a vertikálne v rámci rodičovského prvku. V tomto prípade je rodičovským komponentom nášho popisku Kirigami.Page. Posledná vec, ktorú musíme urobiť, je nastaviť jeho text: text: "Hello World!".
Zostavenie a inštalácia aplikácie
Vygenerovaný spustiteľný súbor kirigami_hello by ste mali nájsť pod build/debug/kirigami_hello a môžete ho spustiť priamo alebo pomocou cargo run, ale bude mu chýbať ikona okna. Na vyriešenie tohto problému aplikáciu najprv nainštalujeme.
Spustite nasledovné:
cmake -B build --install-prefix ~/.local
cmake --build build/
cmake --install build/Prvým príkazom CMake vyhľadá Kirigami a qqc2-desktop-style.
Druhým príkazom CMake zostaví cieľ kirigami_rust, ktorý jednoducho zavolá cargo build --target-dir build/. Dokončenie tohto kroku bude chvíľu trvať, ale nabudúce, keď zopakujete druhý príkaz CMake, bude to rýchlejšie alebo nebudete musieť kompilovať vôbec.
V treťom kroku CMake nainštaluje spustiteľný súbor kirigami_hello pod ~/.local/bin/kirigami_hello a súbor desktop pod ~/.local/share/applications a vo vašom menu sa objaví nová položka s názvom "Kirigami Tutorial in Rust".
Otvorte položku menu a voilà! Teraz uvidíte vašu úplne prvú aplikáciu Kirigami priamo pred vašimi očami.

Na spustenie novej QML aplikácie v mobilnom režime môžete použiť QT_QUICK_CONTROLS_MOBILE=1:
QT_QUICK_CONTROLS_MOBILE=1 kirigami_helloAk ste skompilovali projekt manuálne pomocou CMake a z nejakého dôvodu by ste chceli projekt odinštalovať, môžete spustiť:
cmake --build build/ --target uninstall