C++ QML Integration

dsNDesign

Erfahrenes Mitglied
Hei,

ich habe mir in QML ein paar eigene Typen erstellt. Diese sehen beispielsweise so aus:
Code:
import QtQuick 1.1

Item {
    width: 300
    height: 150
    
    Rectangle {
        anchors.fill: parent
        
        Text {
            anchors.top: parent.top
            anchors.topMargin: 10
            anchors.left: parent.left
            anchors.leftMargin: 10
        }
    }
}

Diese Typen möchte ich nun in C++ instanziieren.

Dies könnte ich bspw. damit machen:
Code:
QDeclarativeView view;
view.setSource(QUrl::fromLocalFile("item.qml"));
view.show();

So habe ich aber von meinem Item nur eine Instanz. Ich möchte aber mehrere nebeneinander z.B. in einem Grid anzeigen lassen. Dies könnte ich nun natürlich lösen, indem ich eine QML Datei erstelle, in welchem das fertige Grid mit allen Items drin ist, jedoch möchte ich es variabler aus der C++ Klasse heraus machen.

Hat dafür jemand ne Idee, wie ich das lösen kann?

Gruß
 
Hi,
wenn ich das Problem richtig verstehe, könntest du ein GridLayout nutzen und dieses mittels Schleifen mit QDeclerativeViews füllen.

Grüße,
Jennesta
 
Wie sieht es dabei Performance mäßig aus?

Das Problem könnte dabei sein, dass ich aber nachher nicht mehr auf die einzelnen Objekte zugreifen kann oder irre ich mich da?
Möchte nachher via object->setProperty die Werte der QML Items/Objekte anpassen können.
 
Ich hab es leider noch nicht ausprobiert, daher kann ich bzgl. der Performance nur ins Blaue raten. Aber mit der Schleife das initialisieren musst du ja zumindest nur einmal machen.
Wenn du mittels addWidget() dem Layout ein QDeclerativeViews hinzufügst benötigst du ja sowieso einen Zeiger auf das erstellte Objekt. Wenn du es wie oben mittels object->setProperty verändern können möchtest, würde ich dir empfehlen alle erstellen Objekte in einer Liste oder Vektor zu speichern. Dann kannst du einmal bequem iterieren und musst die Objekte nicht zuvor im Code umständlich benennen.
 
Ich hatte es jetzt gelöst, indem ich die QML in ein QGraphicsObject geladen habe.
Das funktioniert auch soweit.

Das Problem ist jetzt nur, dass die Performance von QGraphicsObjects geringer ist, als von QGraphicsItems.

Gibt es eine Möglichkeit, qml Files in C++/Qt zu inkludieren und dabei die Performance-Vorteile von QGraphicsItems zu verwenden?
Alternativ könnte ich die Objekte auch komplett in einer QGraphicsItem Klasse deklarieren, jedoch wäre es in QML schöner und einfacher.
 
Warum geht das ganze nicht komplett in QML?

Code:
Repeater {
    model: 100 // <-- count or model here
    
    delegate: Item {
        // <-- your item here
    }
}

Ich glaube wenn du qml Sachen von C++ aus erstellst hast du vermutlich etwas verkehrt gemacht :)

Gruß,
Erik
 
Zurück