将 QML 中对象的 QAbstractListModel 派生列表模型成员绑定为Q_PROPERTY
Bind a QAbstractListModel derived listmodel member of an object in QML as Q_PROPERTY
我想出了如何将QAbstractListModel派生的列表模型的实例公开和绑定到QML。
但我真正想做的是向QML公开一个对象,并将一个成员绑定为QAbstractListModel派生的列表模型作为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: error: 'QAbstractListModel& QAbstractListModel::operator=(const QAbstractListModel&)' is private 类 &运算符=(常量类 &) Q_DECL_EQ_DELETE; ^
如何做到这一点?
像
QAbstractItemModels这样的QObjects无法复制,你必须使用指针。我会使用:
Q_PROPERTY(MyListModel* myListModel READ myListModel CONSTANT)
由于您不替换模型本身,只替换其内容,因此您不需要 myListModelChanged() 信号,可以将其标记为 CONSTANT
。
你的 getter 已经有正确的类型,尽管它应该是 const:
MyListModel *MyObject::myListModel() const
相关文章:
- ROS 订阅回调 - 使用 boost::绑定成员函数
- 为什么我们需要 & in 绑定成员函数?
- 如何修改 std::generate 的绑定成员函数的结果
- 如何正确绑定成员函数与 boost::bind
- C2276 '&':对绑定成员函数表达式的非法操作
- 使用带有 boost::optional" 参数与 boost::spirit 绑定成员函数
- C 快速绑定成员功能的方法
- 模板类重载std::绑定成员函数
- 是否可以检测绑定成员函数引用的对象是否被删除或销毁
- 以可变参数方式绑定成员函数
- 传递绑定成员函数
- '&' :对绑定成员函数表达式的非法操作
- 绑定C++成员变量:getter/setter 或原始指针
- 使用boost绑定成员函数
- 具有静态绑定成员函数指针的可变模板的多个专业化
- "&":对绑定成员函数表达式的非法操作。从关键点矢量 OpenCV 获取容量
- 绑定成员函数的地址
- Boost.绑定成员函数并将其发布到io_service
- "!"绑定成员函数表达式的非法操作
- 绑定成员函数