我正在设计一个包含 3 个列表的 qml 页面。我希望数据作为来自 cpp 的模型显示在这些列表中。我可以将所有这 3 个模型作为单个类的属性吗?
我有一个派生自 qabstractlistmodel 的类用作模型。我希望此模型作为另一个类的属性,该类使用 qqmlcontextproperty 绑定(bind)到 qml。
即。我可以将此模型作为属性访问。
class ToDoModel : public QAbstractListModel
{
Q_OBJECT
...
}
class HelperClass : public QObject
{
Q_OBJECT
Q_PROPERTY(ToDoModel todoModel READ todoModel CONSTANT)
public:
explicit HelperClass(QObject *parent = nullptr);
ToDoModel* todoModel() const;
signals:
public slots:
private:
ToDoModel *_todoModel;
};
int main(int argc, char *argv[])
{
HelperClass helperClass;
engine.rootContext()->setContextProperty(QStringLiteral("helperClass"), &helperClass);
...
}
显示错误:
无法处理属性“HelperClass::todoModel”的未注册数据类型“ToDoModel”
最佳答案
QObject 和 QAbstractListModel 一样,不会被复制,所以在那种情况下你必须返回指针。所以一般来说,如果 T 是一个 QObject,那么如果你将它作为一个属性公开,它必须是 Q_Property(T* name ...)
。
所以在你的情况下它变成了:
class HelperClass : public QObject
{
Q_OBJECT
Q_PROPERTY(<b>ToDoModel*</b> todoModel READ todoModel CONSTANT)
// ...
关于c++ - 如何从 qml 访问 qabstractlistmodel 派生类对象作为另一个类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904756/