[英]Bind a QAbstractListModel derived listmodel member of an object in QML as Q_PROPERTY
我想出了如何在QML中公開和綁定QAbstractListModel派生的listmodel的實例。
但我真正想做的是將一個對象暴露給QML並將一個QAbstractListModel派生的listmodel成員綁定為Q_PROPERTY。
我試過這種方式:
class MyObject : public QObject
{
Q_OBJECT
Q_PROPERTY(MyListModel myListModel READ myListModel NOTIFY myListModelChanged)
public:
explicit MyObject(QObject *parent = 0);
MyListModel *myListModel();
signals:
void myListModelChanged();
public slots:
private:
MyListModel *m_myListModel;
};
MyObject::MyObject(QObject *parent) :
QObject(parent)
{
m_myListModel = new MyListModel(this);
}
MyListModel *MyObject::myListModel()
{
return m_myListModel;
}
class MyListModel : public QAbstractListModel {
Q_OBJECT
//...
//...
}
int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv);
QQuickView *view = new QQuickView();
MyObject *myObject = new MyObject();
view->engine()->rootContext()->setContextProperty("myObject", myObject);
view->setSource(QUrl::fromLocalFile("main.qml"));
view->show();
return a.exec();
}
Rectangle {
width: 200
height: 200
//...
//...
ListView {
id: myListView
anchors.fill: parent
delegate: myDelegate
model: myObject.myListModel
}
}
但我收到編譯錯誤:
E:\\ Qt \\ Qt5 \\ 5.1.1 \\ mingw48_32 \\ include \\ QtCore \\ qglobal.h:946:錯誤:'QAbstractListModel&QAbstractListModel :: operator =(const QAbstractListModel&)'是私有Class&operator =(const Class&)Q_DECL_EQ_DELETE; ^
如何正確地做到這一點?
像QAbstractItemModels這樣的QObjects無法復制,必須使用指針。 我用的是:
Q_PROPERTY(MyListModel* myListModel READ myListModel CONSTANT)
由於您不替換模型本身,僅替換其內容,因此您不需要myListModelChanged()信號並將其標記為CONSTANT
。
你的getter已經有了正確的類型,雖然它應該是const:
MyListModel *MyObject::myListModel() const
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.