我有一个QSqlDatabase类,并且在一个类中有指向QSqlTableModel的指针。我使用指向QSqlTableModel的指针,因为数据库的初始化正在构造函数中进行,然后我使用这个数据库创建QSqlTableModel(也在构造函数中,但已经在堆中)。
这个类是在qml中注册的类型,因此我在QML中创建它。如何更好地将TableView指向此类的QSqlTableModel指针?如果可能的话。
答案 0 :(得分:3)
您所询问的内容并不完全清楚。我假设你想用QML分享一个指向模型的指针。
拥有Q_PROPERTY
。 QML会自动显示所有Q_PROPERTY
。
返回QSqlTableModel*
时,您也需要注册该类型。 E.g。
qmlRegisterUncreatableType<QSqlTableModel>(
"NameOfModuleInQML", 1, 0, "QSqlTableModel",
"Cannot instanciate QSqlTableModel from QML");
请注意,您无法执行此操作:
property QSqlTableModel mytabmodel
如果您需要,请执行此操作:
property QtObject mytabmodel
从使用QML注册的类的方法返回它(请注意,您必须返回QObject*
)。这很可能是你想要的。 E.g。
class SomeClass : public QObject {
// ...
public:
Q_INVOKABLE QObject *model() {
return tableModel;
}
// ...
};
然后你可以在QML中执行此操作:
TableView {
model: instanceOfYourclass.model()
// other bindings
TableViewColumn {
title: qsTr("Name")
role: "Name"
width: 150
}
// and so on
}
您可以创建单身
QObject *tableModelProvider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
(void)engine;
(void)scriptEngine;
return new QSqlTableModel(...);
}
qmlRegisterSingletonType<QSqlTableModel>("NameOfModule", 1, 0, "NameInQML", tableModelProvider);
这是一种合适的方法,如果只有一个模型实例,并且您不需要太多的初始化它。
将您的模型设置为上下文属性
QQmlEngine engine;
// ..
engine.rootContext()->setContextProperty("nameInQml", yourTableModelInstance);