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