QML - QML
![]() | tento článek příliš spoléhá na Reference na primární zdroje.Září 2010) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Paradigma | Multi-paradigma: deklarativní, reaktivní, skriptování |
---|---|
Vývojář | Projekt Qt |
Poprvé se objevil | 2009 |
Stabilní uvolnění | 5.15.0[1] / 26. května 2020 |
Psací disciplína | dynamický, silný |
webová stránka | qt-projekt |
Ovlivněno | |
XAML,[2] JSON, JavaScript, Qt | |
Ovlivněno | |
Qt, Prsten[3] |
Přípona názvu souboru | .qml |
---|---|
Vyvinul | Projekt Qt |
Typ formátu | Skriptovací jazyk |
webová stránka | qt-projekt |
QML (Qt Modelovací jazyk[4]) je značkovací jazyk uživatelského rozhraní. Je to deklarativní jazyk (podobně jako CSS a JSON ) pro návrh aplikací zaměřených na uživatelské rozhraní. V souladu JavaScript kód zpracovává imperativní aspekty. Je spojena s Qt Quick, sada pro vytváření uživatelského rozhraní původně vyvinuta Nokia v rámci Qt rámec. Qt Quick se používá pro mobilní aplikace, kde je rozhodující dotykový vstup, plynulé animace a uživatelská zkušenost. QML se také používá s Qt3D[5] popsat 3D scénu a metodiku vykreslování „rámcového grafu“. Dokument QML popisuje strom hierarchických objektů. QML moduly[6] dodávané s Qt zahrnují primitivní grafické stavební bloky (např. Rectangle, Image), komponenty pro modelování (např. FolderListModel, XmlListModel), komponenty chování (např. TapHandler, DragHandler, State, Transition, Animation) a složitější ovládací prvky (např. Button , Posuvník, Zásuvka, Nabídka). Tyto prvky lze kombinovat tak, aby vytvářely komponenty od složitosti od jednoduchých tlačítek a posuvníků až po dokončení programů s internetem.
Standardně lze prvky QML rozšířit JavaScript jak vložené, tak prostřednictvím zahrnutých souborů .js. Prvky lze také bezproblémově integrovat a rozšířit o C ++ komponenty využívající Qt framework.
QML je jazyk; runtime JavaScriptu je vlastní modul V4,[7] od Qt 5.2[8]; a Qt Quick je 2D graf scény a na tom založený rámec uživatelského rozhraní. To vše je součástí modulu Qt Declarative, zatímco tato technologie se již nenazývá Qt Declarative.
Kód QML a JavaScript lze kompilovat do nativních binárních souborů C ++ pomocí rychlého kompilátoru Qt.[9] Alternativně existuje formát souboru mezipaměti QML[10] který dynamicky ukládá kompilovanou verzi QML pro rychlejší spuštění při příštím spuštění.
Přijetí
- KDE Plasma 4[11] a KDE Plasma 5 přes Plazmový rámec
- Liri OS
- Jednoduchý správce zobrazení plochy
- pozoruhodné tabletové zařízení[12][13]
- Unity2D[14]
- Sailfish OS[15][16][17]
- BlackBerry 10[18]
- MeeGo[19][20]
- Maemo[21]
- Tizen[22]
- Mer[23][24][25]
- Telefon Ubuntu[26]
- Lumina (desktopové prostředí)[27]
- Mnoho open-source aplikace
Syntaxe, sémantika
Základní syntaxe
Příklad:
import QtQuick 2.9 // import z Qt 5.9 Obdélník { id: plátno šířka: 250 výška: 200 barva: "modrý" obraz { id: logo zdroj: „pics / logo.png“ anchors.centerIn: rodič X: plátno.výška / 5 } }
Objekty jsou specifikovány podle jejich typu, následované dvojicí složených závorek. Typy objektů vždy začínají velkým písmenem. Ve výše uvedeném příkladu existují dva objekty, obdélník; a jeho dítě, obraz. Mezi složenými závorkami lze určit informace o objektu, například jeho vlastnosti. Vlastnosti jsou zadány jako vlastnost: hodnota. Ve výše uvedeném příkladu vidíme, že Image má vlastnost s názvem source, kterému byla přiřazena hodnota pics / logo.png
. Vlastnost a její hodnota jsou odděleny dvojtečkou.
Vlastnost id
Každý objekt může mít speciální jedinečnou vlastnost zvanou id. Přiřazení ID umožňuje, aby na objekt odkazovali jiné objekty a skripty. První obdélníkový prvek níže má ID, myRect
. Druhý prvek Rectangle definuje svou vlastní šířku odkazem na myRect.width
, což znamená, že bude mít stejnou hodnotu šířky jako první prvek Obdélník.
Položka { Obdélník { id: myRect šířka: 120 výška: 100 } Obdélník { šířka: myRect.šířka výška: 200 } }
Upozorňujeme, že ID musí začínat malými písmeny nebo podtržítkem a nesmí obsahovat jiné znaky než písmena, číslice a podtržítka.
Vazby vlastností
Vlastnost vazba určuje hodnotu vlastnosti deklarativním způsobem. Hodnota vlastnosti se automaticky aktualizuje, pokud se změní ostatní vlastnosti nebo hodnoty dat, následující reaktivní programování paradigma.
Vazby vlastností se vytvářejí implicitně v QML, kdykoli je vlastnosti přiřazen výraz JavaScriptu. Následující QML používá dvě vazby vlastností k připojení velikosti obdélníku k velikosti otherItem.
Obdélník { šířka: otherItem.šířka výška: otherItem.výška }
QML rozšiřuje standardizovaný modul JavaScriptu, takže jako závaznou vlastnost lze použít jakýkoli platný výraz JavaScriptu. Vazby mohou přistupovat k vlastnostem objektu, provádět volání funkcí a dokonce používat vestavěné objekty JavaScriptu, jako jsou Date a Math.
Příklad:
Obdélník { funkce vypočítat MyHeight() { vrátit se Matematika.max(otherItem.výška, třetí položka.výška); } anchors.centerIn: rodič šířka: Matematika.min(otherItem.šířka, 10) výška: vypočítat MyHeight() barva: šířka > 10 ? "modrý" : "Červené" }
Státy
Státy jsou mechanismus kombinující změny vlastností v sémantické jednotce. Tlačítko má například stisknutý a nestlačený stav, aplikace adresáře může mít stav jen pro čtení a úpravy pro kontakty. Každý prvek má „implicitní“ základní stav. Každý další stav je popsán uvedením vlastností a hodnot těch prvků, které se liší od základního stavu.
Příklad: Ve výchozím stavu je myRect umístěn na 0,0. Ve stavu „přesunuto“ je umístěn na 50,50. Kliknutím do oblasti myši změníte stav z výchozího stavu do stavu „přesunut“, čímž se přesune obdélník.
import QtQuick 2.0 Položka { id: myItem šířka: 200; výška: 200 Obdélník { id: myRect šířka: 100; výška: 100 barva: "Červené" } uvádí: [ Stát { název: "přestěhoval" Změny vlastností { cílová: myRect X: 50 y: 50 } } ] Myší oblast { anchors.fill: rodič onClicked: myItem.Stát = 'přestěhoval' } }
Změny stavu lze animovat pomocí přechodů.
Například přidání tohoto kódu do výše uvedeného prvku položky animuje přechod do stavu „přesunuto“:
přechody: [ Přechod { z: "*" na: "přestěhoval" NumberAnimation { vlastnosti: „x, y“; doba trvání: 500 } } ]
Animace
Animace v QML se provádějí animací vlastností objektů. Vlastnosti typu real, int, color, rect, point, size a vector3d lze animovat.
QML podporuje tři hlavní formy animace: animace základních vlastností, přechody a chování vlastností.
Nejjednodušší formou animace je PropertyAnimation, která může animovat všechny výše uvedené typy vlastností. Animaci vlastnosti lze zadat jako zdroj hodnoty pomocí Animation on syntaxe vlastnosti. To je užitečné zejména při opakování animací.
Následující příklad vytvoří efekt odrazu:
Obdélník { id: rect šířka: 120; výška: 200 obraz { id: obr zdroj: „pics / qt.png“ X: 60 - obr.šířka/2 y: 0 SequentialAnimation na y { smyčky: Animace.Nekonečný NumberAnimation { na: 200 - obr.výška; typ uvolnění: Uvolnění.OutBounce; doba trvání: 2000 } PauseAnimation { doba trvání: 1000 } NumberAnimation { na: 0; typ uvolnění: Uvolnění.OutQuad; doba trvání: 1000 } } } }
Integrace Qt / C ++
Použití QML nevyžaduje použití Qt / C ++ znalostí, ale lze jej snadno rozšířit pomocí Qt.[28][29] Libovolnou třídu C ++ odvozenou z QObject lze snadno zaregistrovat jako typ, který lze poté vytvořit v QML.
Známé koncepty
QML poskytuje přímý přístup k následujícím konceptům z Qt:
- Signály QObject - mohou vyvolat zpětná volání v JavaScriptu
- Sloty QObject - dostupné jako funkce pro volání v JavaScriptu
- Vlastnosti QObject - dostupné jako proměnné v JavaScriptu a pro vazby
- QWindow - Okno vytvoří v okně scénu QML
- Q * Model - používá se přímo v datové vazbě (např. QAbstractItemModel)[30][31][32]
Obsluha signálů
Obslužné rutiny signálů jsou zpětná volání JavaScriptu, která umožňují provedení imperativních akcí v reakci na událost. Například prvek MouseArea má obslužné rutiny signálu pro manipulaci s stiskem, uvolněním a kliknutím myší:
Myší oblast { onPressed: řídicí panel.log("stisknuto tlačítko myši") }
Všechna jména obsluhy signálů začínají „na“.
Vývojové nástroje
Vzhledem k tomu, že QML a JavaScript jsou velmi podobné, budou fungovat téměř všechny editory kódu podporující JavaScript. Plná podpora pro zvýraznění syntaxe, doplnění kódu, integrovaná nápověda a editor WYSIWYG jsou k dispozici v bezplatném IDE pro různé platformy Tvůrce Qt od verze 2.1 a mnoho dalších IDE.
Spustitelný soubor qml lze použít ke spuštění souboru QML jako skriptu. Pokud soubor QML začíná písmenem Shebang lze jej přímo spustit. Balení aplikace pro nasazení (zejména na mobilních platformách) však obecně zahrnuje psaní jednoduchého spouštěče C ++ a zabalení potřebných souborů QML jako prostředků.
Reference
- ^ „Vydáno Qt 5,15“.
- ^ „Které rozhraní pro moderní aplikaci?“. scriptol.
- ^ Ring Team (5. prosince 2017). „Programovací jazyk Ring a další jazyky“. ring-lang.net. ring-lang.
- ^ "Změny deklarativního rozhraní Qt | Blog Qt". 25. března 2014. Archivovány od originál dne 25. března 2014.
- ^ „Qt 3D Overview | Qt 3D 5.13.1“. doc.qt.io.
- ^ "Všechny typy QML | Qt 5,13". doc.qt.io. Citováno 7. září 2019.
- ^ Knoll, Lars (2013-04-15). „Vývoj motoru QML, část 1“. Citováno 2018-05-11.
- ^ „Co je nového v Qt 5.2“. Citováno 2018-05-11.
- ^ „Qt Quick Compiler“. Citováno 7. září 2019.
- ^ "Nasazení aplikací QML | Qt 5,13". doc.qt.io. Citováno 7. září 2019.
- ^ „Vývoj / Návody / Plasma4 / QML / GettingStarted“. KDE TechBase. KDE.
- ^ Dragly, Svenn-Arne. „Vývoj pro pozoruhodný tablet“. drahý.
- ^ „Ukázka QML pro doporučovaný papírový tablet“. GitHub.
- ^ „Unity Ubuntu napsané v Qt / QML pro“ Unity Next"". Michael Larabel.
- ^ "Kombinace C ++ s QML v aplikacích Sailfish OS".
- ^ "Výukový program - QML živé kódování s Qt QmlLive".
- ^ „QML to C ++ and C ++ to QML“. Jolla.
- ^ „QML fundamentals“. Ostružina.
- ^ „Úvod do QML pro Meego“. Nokia.
- ^ „MeeGo and Qt / QML dema assault MWC“. Gadgety IoT.
- ^ „QML na N900“. maemo.org. Komunita Maemo.
- ^ „Qt uvádí na Tizen standardní vzhled a dojem“.
- ^ "Mer".
- ^ "Mer wiki".
- ^ „Rtěnka QML UI na MeeGo CE / Mer“. Gadgety IoT.
- ^ „QML - nejlepší nástroj k odemčení vaší kreativity“. Ubuntu.
- ^ „Pohled na Lumina Desktop 2.0“. TrueOS.
- ^ Alpert, Alan. „Příběh uživatele Qt / QML“. Neoprávnitelné představy.
- ^ Alpert, Alan. "Mnoho způsobů, jak sjednotit QML a C ++". Dny vývojářů Qt. Ostružina.
- ^ Dahlbom, J. „QAbstractItemModels v zobrazeních QML“. Chybějící kousky.
- ^ "Řazení a filtrování TableView". Společnost Qt.
- ^ Brad, van der Laan. "Jak používat Qtův QSortFilterProxyModel". Imaginativní přemýšlení.
externí odkazy
- Referenční dokumentace QML
- První kroky s QML
- Příklady a návody QML
- Qt Blog
- Výukový program QML
- Příručky pro vývojáře Qt
- Export QML z Photoshopu a GIMP
- Aplikační kompletní fakturační systém v QML - Khitomer
- Tvůrce QML
- Kniha QML