QML-Tutorial für Fortgeschrittene 1 - Erstellen des Spielbildschirms und der Blöcke
Erstellen des Anwendungsbildschirms
Der erste Schritt besteht darin, die grundlegenden QML-Elemente in Ihrer Anwendung zu erstellen.
Zu Beginn erstellen wir unsere Same Game-Anwendung mit einem Hauptbildschirm wie diesem:
Dieser wird durch die Hauptanwendungsdatei samegame.qml
definiert, die wie folgt aussieht:
import QtQuick Rectangle { id: screen width: 490; height: 720 SystemPalette { id: activePalette } Item { width: parent.width anchors { top: parent.top; bottom: toolBar.top } Image { id: background anchors.fill: parent source: "pics/background.jpg" fillMode: Image.PreserveAspectCrop } } Rectangle { id: toolBar width: parent.width; height: 30 color: activePalette.window anchors.bottom: screen.bottom Button { anchors { left: parent.left; verticalCenter: parent.verticalCenter } text: "New Game" onClicked: console.log("This doesn't do anything yet...") } Text { id: score anchors { right: parent.right; verticalCenter: parent.verticalCenter } text: "Score: Who knows?" } } }
Damit erhalten Sie ein grundlegendes Spielfenster, das die Hauptfläche für die Blöcke, eine Schaltfläche "Neues Spiel" und eine Punkteanzeige enthält.
Ein Element, das Sie hier vielleicht nicht erkennen, ist das Element SystemPalette. Es ermöglicht den Zugriff auf die Qt-Systempalette und wird verwendet, um der Schaltfläche ein natives Aussehen zu verleihen.
Beachten Sie, dass die Anker für die Typen Item
, Button
und Text
aus Gründen der Lesbarkeit in Gruppennotation (Punkt) gesetzt sind.
Hinzufügen der Komponenten Button
und Block
Das Element Button
im obigen Code ist in einer separaten Komponentendatei namens Button.qml
definiert. Um eine funktionale Schaltfläche zu erstellen, verwenden wir die QML-Typen Text und MouseArea innerhalb einer Rectangle. Hier ist der Button.qml
-Code:
import QtQuick Rectangle { id: container property string text: "Button" signal clicked width: buttonLabel.width + 20; height: buttonLabel.height + 5 border { width: 1; color: Qt.darker(activePalette.button) } antialiasing: true radius: 8 // color the button with a gradient gradient: Gradient { GradientStop { position: 0.0 color: { if (mouseArea.pressed) return activePalette.dark else return activePalette.light } } GradientStop { position: 1.0; color: activePalette.button } } MouseArea { id: mouseArea anchors.fill: parent onClicked: container.clicked(); } Text { id: buttonLabel anchors.centerIn: container color: activePalette.buttonText text: container.text } }
Dieser definiert im Wesentlichen ein Rechteck, das Text enthält und angeklickt werden kann. Der MouseArea hat einen onClicked()
Handler, der implementiert ist, um das clicked()
Signal des container
auszugeben, wenn der Bereich angeklickt wird.
In Same Game wird der Bildschirm mit kleinen Blöcken gefüllt, wenn das Spiel beginnt. Jeder Block ist nur ein Element, das ein Bild enthält. Der Blockcode ist in einer separaten Block.qml
Datei definiert:
import QtQuick Item { id: block Image { id: img anchors.fill: parent source: "pics/redStone.png" } }
Im Moment tut der Block noch nichts, er ist nur ein Bild. Im weiteren Verlauf des Tutorials werden wir die Blöcke animieren und mit Verhaltensweisen versehen. Wir haben noch keinen Code zur Erstellung der Blöcke hinzugefügt; das werden wir im nächsten Kapitel tun.
Wir haben das Bild mit anchors.fill: parent
auf die Größe des übergeordneten Elements eingestellt. Das bedeutet, dass das Bild automatisch auf die richtige Größe skaliert wird, wenn wir die Blöcke später im Lehrgang dynamisch erstellen und ihre Größe ändern.
Beachten Sie den relativen Pfad für die Eigenschaft source
des Typs Image. Dieser Pfad bezieht sich auf den Speicherort der Datei, die den Typ Image enthält. Alternativ können Sie die Bildquelle auch auf einen absoluten Dateipfad oder eine URL, die ein Bild enthält, setzen.
Sie sollten mit dem bisherigen Code vertraut sein. Wir haben nur einige grundlegende Typen erstellt, um den Einstieg zu erleichtern. Als Nächstes werden wir die Spielfläche mit einigen Blöcken füllen.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.