Comment insérer ListElement dans un QML ListModel à l'aide de C++?
Bien, je suis en train d'apprendre à travailler avec QML et j'ai un doute. Dans mon exemple, j'ai un ListModel avec ListElements à QML et j'ai un QML fichier principal avec un rectangle, PathView etc.
J'ai un QWidget aussi, que ma fenêtre principale. Dans ce QWidget-je inclure le QML de l'INTERFACE utilisateur comme un composant. Ok!
Comment puis-je gérer QML ListElements à l'aide de C++?
Note: quand je dis "à traiter", je veux dire un élément par exemple.
Ci-dessous sont quelques parties de mon code...
QML contenant mon ListElement, appelé "Menu1":
import QtQuick 1.0
ListModel {
id: listMovieModel
ListElement { name: "Image 1"; iconSource: "pics/image_1.jpg" }
ListElement { name: "Image 2"; iconSource: "pics/image_2.jpg" }
ListElement { name: "Image 3"; iconSource: "pics/image_3.jpg" }
ListElement { name: "Image 4"; iconSource: "pics/image_4.jpg" }
ListElement { name: "Image 5"; iconSource: "pics/image_5.jpg" }
ListElement { name: "Image 6"; iconSource: "pics/image_6.jpg" }
}
Mon principal QML:
Rectangle {
width: 500
height: 600
color: "transparent"
PathView {
id: view
focus: true
width: parent.width
height: parent.height + y
y: -150
model: Menu1 {} //First QML showed
delegate: Image {
source: iconSource
width: 64
height: 90
scale: PathView.isCurrentItem ? 3.5 * y / parent.height : 2.0 * y / parent.height
z: y
smooth: true
}
path: MyGeometricFigure { //This a another file, but is confidential
width: view.width
height: view.height
}
preferredHighlightBegin: 0
preferredHighlightEnd: 0
highlightRangeMode: PathView.StrictlyEnforceRange
Keys.onLeftPressed: decrementCurrentIndex()
Keys.onRightPressed: incrementCurrentIndex()
}
}
Et comme je l'ai utiliser QML comme un composant pour mon QWidget:
MainForm::MainForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainForm)
{
ui->setupUi(this);
this->resize(1024, 576);
QDeclarativeView *myQMLTest = new QDeclarativeView(QUrl::fromLocalFile("myMainQML.qml"));
myQMLTest->setStyleSheet(QString("background: transparent; width: 600px"));
this->ui->frameListVideoGallery->layout()->addWidget(myQMLTest);
myQMLTest->setFocus();
myQMLTest->installEventFilter(this);
}
J'ai vu quelques articles sur ce sujet, mais je ne suis pas en mesure de changer mon LisModel à l'aide de C++. J'ai vu ici http://doc.qt.nokia.com/4.7/qdeclarativemodels.html#c-data-models et ici, dans les exemples à l'aide de PathView http://doc.qt.nokia.com/4.7/qdeclarativeexamples.html
Quelqu'un peut m'aider?
Merci!
OriginalL'auteur Adriano Leal | 2012-02-02
Vous devez vous connecter pour publier un commentaire.
Bien. Je pense que vous pouvez faire quelque chose comme ceci:
Dans votre principale QML-fichier ajouter une fonction simple.
Cette méthode il suffit d'appeler un correspondant méthode de ListModel. Prend en charge plus de méthodes que vous pouvez y trouver.
Puis tous vous avez besoin est d'appeler cette méthode à partir d'un code C++. Vous pouvez le faire de cette manière:
Vous devriez vérifier cette pour plus d'informations.
Vous pouvez aussi choisir une autre approche: de transmettre des données via qml propriétés (à l'aide de QDeclarativeEngine et QDeclarativeContext) et de gérer ces données et votre liste-modèle droit dans le code JavaScript.
J'ai juste essayé de répondre à votre question 🙂 Content que vous avez trouvé un autre moyen de faire ce que vous voulez.
que le lien est mort, de toute façon de montrer comment vous avez géré le remplissage de la liste à partir de C++?
OriginalL'auteur GooRoo
Je veux faire de la réponse de @GooRoo plus complet/utile pour Qt débutants. Si vous utilisez le Qt Creator, vous allez commencer avec un modèle à l'aide de QmlApplicationViewer. Pour appliquer la réponse de GooRoo que vous avez à faire quelque chose comme cela (merci à http://www.lothlorien.com/kf6gpe/?p=309):
RPC:
QML:
OriginalL'auteur meolic