QML Access c++ Models
Verfasst: 21. Juni 2013 11:35
Hi,
ich hoffe ich bin richtig hier. Ich habe vor kurzen mit qml angefangen und dabei recht schnell auf mein erstes Problem gestoßen und zwar dem Datenaustausch zwischen qml und c++.
Ich möchte gerne auf mein C++ ListModel ( erbt von QAbstractListModel) außerhalb eines (QML) ListView zugreifen.
Innerhalb der (QML) ListView funktioniert alles perfekt. Ich habs auch bereits mit qmlRegisterInterface oder/und qRegisterMetaType versucht aber leider ohne Erfolg.
Hier mal mein code
ch hab auch ein kleine Beispielprogramm angehängt):
main.cpp
parent.h (subclass ist genau so aufgebaut und erbt von Parent)
main.qml
Ich hoffe Ihr könnt mir helfen.
ich hoffe ich bin richtig hier. Ich habe vor kurzen mit qml angefangen und dabei recht schnell auf mein erstes Problem gestoßen und zwar dem Datenaustausch zwischen qml und c++.
Ich möchte gerne auf mein C++ ListModel ( erbt von QAbstractListModel) außerhalb eines (QML) ListView zugreifen.
Innerhalb der (QML) ListView funktioniert alles perfekt. Ich habs auch bereits mit qmlRegisterInterface oder/und qRegisterMetaType versucht aber leider ohne Erfolg.
Hier mal mein code
main.cpp
Code: Alles auswählen
ListModel *listModel = new ListModel();
listModel->add(new Subclass("Class 1", "Class 1.1", "Class 1.2") );
// qmlRegisterInterface<ListModel>("ListModel");
qmlRegisterInterface<Parent>("Parent");
qmlRegisterInterface<Subclass>("Subclass");
qRegisterMetaType<Parent>("Parent");
qRegisterMetaType<Parent>("Subclass");
QtQuick2ApplicationViewer viewer;
viewer.rootContext()->setContextProperty("listModel", listModel);
viewer.setMainQmlFile(QStringLiteral("qml/test/main.qml"));
viewer.showExpanded();
parent.h (subclass ist genau so aufgebaut und erbt von Parent)
Code: Alles auswählen
class Parent : public QObject
{
Q_OBJECT
Q_PROPERTY(QString firstname READ getFirstname WRITE setFirstname NOTIFY firstNameChanged )
Q_PROPERTY(QString lastname READ getLastname WRITE setLastname NOTIFY lastNameChanged)
public:
explicit Parent(){}
explicit Parent(const QString &first, const QString &last,QObject *parent = 0);
Parent( const Parent &p);
Parent& operator=(const Parent & p);
signals:
public slots:
QString getFirstname() const;
QString getLastname() const ;
void setFirstname( const QString &firstname);
void setLastname( const QString &lastname);
private:
QString _firstname;
QString _lastname;
signals:
void firstNameChanged();
void lastNameChanged();
};
Q_DECLARE_METATYPE( Parent )
Code: Alles auswählen
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Component
{
id: decorator
Rectangle{
height: 100
width: 360
color: "yellow"
opacity: 0.5
Text {
text: '<b>Firstname:</b> ' + model.firstname1 + '<br>' +
'<b>Lastname:</b> ' + model.lastname1 + '<br>' +
'<b>SubclassName:</b> ' + model.scublassname1 + '<br>'
}
MouseArea {
anchors.fill: parent;
onClicked:{
listview.currentIndex = index;
}
}
}
}
ListView{
id: listview
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: 200
model: listModel
delegate: decorator
spacing: 15
focus: true
clip: true
}
Rectangle{
color: "blue"
anchors.top: listview.bottom
anchors.left: parent.left
anchors.right: parent.right
height: 160
Text{
anchors.fill: parent
text: {
"index =["+listview.currentIndex+"] " + listModel.get(listview.currentIndex).firstname
}
}
}
}