QML: Wie verschieben Sie Elemente in einem grid
Ich habe ein 4x4-raster und ich verbinden wollen, Pfeil-Taste drückt, mit der Bewegung der Elemente innerhalb des Rasters. Wie macht man das?
Hier ist ein Beispiel QML:
import QtQuick 1.1
Rectangle {
id: main;
width: 500; height: 500;
color: "darkgreen";
property int emptyBlock: 16;
Grid {
id: grid16;
x: 5; y: 5;
width: 490; height: 490;
rows: 4; columns: 4; spacing: 5;
Repeater {
model: 1;
Rectangle {
width: 118; height: 118; color: "darkblue";
}
}
}
Keys.onRightPressed: pressRight();
function pressRight() {
console.log("Left key pressed");
}
focus: true;
}
Update 1: Dank sebasgo und alexisdm für die Antworten. Wenn das verschieben innerhalb eines Grids ist nicht so einfach, deshalb haben wir die move
transition-Eigenschaft [http://qt-project.org/doc/qt-4.8/qml-grid.html#move-prop]
Update 1, siehe mein Beispiel unten, wo Sie sich bewegen können ein Element auf ein 4x4-grid-Größe.
InformationsquelleAutor Xolve | 2012-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie besser mit einem
GridView
Element anstelle IhrerGrid
Ansatz.Diese Weise können Sie es verwenden, ist
currentIndex
Eigenschaft zu wählen, welches Element zu bewegen, wie dies:InformationsquelleAutor TheHuge_
Grids geben Sie keine Möglichkeit zu manipulieren, um die position der enthaltenen Objekte direkt. Statt Ihre position ist direkt abgeleitet von den körperlich Reihenfolge der Kind-Elemente des Gitters. Es ist kein einfacher Weg , zum Bearbeiten von untergeordneten Elementen in QML dynamisch, so denke ich, sollten Sie aufgeben, die
Grid
Element, und geben Sie die position der untergeordneten Elemente, die explizit mit derx
undy
Eigenschaften. Angewendet, um Ihren code könnte dies so Aussehen:Update 1:
Netze (in Kombination mit einem Repeater) kann verwendet werden, um zu visualisieren, Modelle, z.B., ein
XmlListModel
Element oder eineQAbstractItemModel
Nachkomme.Mit
move
Eigenschaft es ist einfach zu reagieren, um layout-änderungen in der Modell (wenn ein Eintrag entfernt/Hinzugefügt) in einer animierten Weise. Dennoch, die Gegenstände in derGrid
angeordnet sind streng in der Reihenfolge der Einträge in der model.Wenn Sie So wollen, haben die manuelle Kontrolle über die position der einzelnen Elemente, auch im zellulären Aufbau, Verwendung einer
Grid
ist nicht ratsam.InformationsquelleAutor sebasgo
Können Sie ändern die Anzahl der Elemente vor dem Element, das Sie verschieben möchten, um die position zu ändern:
InformationsquelleAutor alexisdm
Nun, mit Qt 5.1 oder oben und GridLayout können Sie verschieben Sie Ihre Objekte ohne Aufwand:
InformationsquelleAutor Aquarius_Girl
Das GridView ist ein sehr verwirrender monster. Ich habe gerade füllt eine Zeile aus einem gegebenen Modell, das führt zu Verwirrung, da es heißt GRID. Aber es kann immer noch verwendet werden, als eine Feste Größe raster, wie ich in den Beispiel unten. Ein einzelner Platz kann mit den Pfeiltasten bewegt sich auf einem 4x4-size raster.
InformationsquelleAutor user3054986