C++ 将QML中对象的QAbstractListModel派生listmodel成员绑定为Q_属性
我了解了如何在QML中公开和绑定QAbstractListModel派生listmodel的实例 但我真正想做的是向QML公开一个对象,并将一个成员绑定为QAbstractListModel派生的listmodel作为Q_属性 我试过这样做:C++ 将QML中对象的QAbstractListModel派生listmodel成员绑定为Q_属性,c++,qt,qml,qt-quick,qabstractlistmodel,C++,Qt,Qml,Qt Quick,Qabstractlistmodel,我了解了如何在QML中公开和绑定QAbstractListModel派生listmodel的实例 但我真正想做的是向QML公开一个对象,并将一个成员绑定为QAbstractListModel派生的listmodel作为Q_属性 我试过这样做: class MyObject : public QObject { Q_OBJECT Q_PROPERTY(MyListModel myListModel READ myListModel NOTIFY myListModelChanged
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\u 32\include\QtCore\qglobal.h:946:错误:“QAbstractListModel&QAbstractListModel::operator=(const QAbstractListModel&)”是私有的
类和运算符=(常量类和)Q_DECL_EQ_DELETE;
^
如何正确执行此操作?qabstractemmodels之类的对象无法复制,必须使用指针。我会使用:
Q_PROPERTY(MyListModel* myListModel READ myListModel CONSTANT)
由于不替换模型本身,只替换其内容,因此不需要myListModelChanged()信号,并且可以将其标记为常量
您的getter已经有了正确的类型,尽管它应该是const:
MyListModel *MyObject::myListModel() const