I'm writing a QML+Qt application . I defined a class like this :
class MainClass : public QObject
{
Q_OBJECT
public:
rosterItemModel m_rosterItemModel;
.
.
.
}
rosterItemModel model is a class derived from QAbstractListModel. I exposed MainClass to qml part using this function :
qmlRegisterType<MainClass>("CPPIntegrate", 1, 0, "MainClass");
Now I want to assign this model(m_rosterItemModel) from MainClass to model property of a ListView in QML. I tried the following ways but none of them were helpful :(
Could someone help me?
There shouldn't be any metatype registration necessary. All you need to is to call setContextProperty and pass the model by pointer:
QQmlContext* context = view->rootContext(); //view is the QDeclarativeView
context->setContextProperty( "_rosterItemModel", &mainClassInstance->m_rosterItemModel );
Use it in QML:
model: _rosterItemModel
By pointer is important, as QObject's are not copy-constructible and copying them would break their semantics anyway (as they have an "identity").
The alternative to registering the model directly is to register your main class' instance and using Q_INVOKABLE. In MainClass:
Q_INVOKABLE RosterItemModel* rosterItemModel() const;
Registering an instance of mainClass (mainClassInstance again is assumed to be a pointer):
context->setContextProperty( "_mainInstance", mainClassInstance );
In QML:
model: _mainInstance.rosterItemModel()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With