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 🙁
- I tried to declare m_rosterItemModel as a PROPERTY using Q_PROPERTY .
I couldn’t do that because it said that QAbstractListModel is not
copy-able. - I tried to get a pointer to m_rosterItemModel in qml file using a
Q_INVOKABLE function in MainClass. But it wasn’t helpful too.
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:
Use it in QML:
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:
Registering an instance of mainClass (mainClassInstance again is assumed to be a pointer):
In QML: