我正在编写QML + Qt应用程序。 我定义了这样一个类:
class MainClass : public QObject
{
Q_OBJECT
public:
rosterItemModel m_rosterItemModel;
.
.
.
}
rosterItemModel模型是从QAbstractListModel派生的类。 我使用这个函数将MainClass暴露给qml部分:
qmlRegisterType<MainClass>("CPPIntegrate", 1, 0, "MainClass");
现在我想将这个模型(m_rosterItemModel)从MainClass分配给QML中ListView的模型属性。 我尝试了以下方法,但没有一个是有用的:(
有人可以帮助我吗?
答案 0 :(得分:6)
不应该有任何元数据注册。 您只需调用setContextProperty并通过指针传递模型:
QQmlContext* context = view->rootContext(); //view is the QDeclarativeView
context->setContextProperty( "_rosterItemModel", &mainClassInstance->m_rosterItemModel );
在QML中使用它:
model: _rosterItemModel
指针很重要,因为QObject不是可复制构造的,复制它们会破坏它们的语义(因为它们具有“身份”)。
直接注册模型的替代方法是注册主类的实例并使用Q_INVOKABLE。在MainClass中:
Q_INVOKABLE RosterItemModel* rosterItemModel() const;
注册mainClass的实例(mainClassInstance再次被假定为指针):
context->setContextProperty( "_mainInstance", mainClassInstance );
在QML中:
model: _mainInstance.rosterItemModel()