Q_INVOKABLE
предназначен для предоставления методов QML для производных типов QObject.Вы можете использовать Qt property system
для демонстрации вашей QAbstractTableModel из вашего "глобального объекта", который вы сделали доступным для QML через контекст QML (как вы прокомментировали под своим вопросом).
Вы можете прочитать из документации больше о предоставление атрибутов типов C ++ для QML .
MyTableModel, производных от QAbstractTableModel:
class MyTableModel : public QAbstractTableModel
{
Q_OBJECT
};
MyGlobalObject, предоставление переменной-члена MyTableModel через систему свойств:
class MyGlobalObject : public QObject
{
Q_OBJECT
Q_PROPERTY(QAbstractTableModel* myTableModel READ myTableModel CONSTANT)
public:
MyGlobalObject(QObject *parent = nullptr) : QObject(parent), m_myTableModel(new MyTableModel) { }
MyTableModel *myTableModel() { return m_myTableModel.data(); }
private:
QScopedPointer<MyTableModel> m_myTableModel;
};
Экземпляр MyGlobalObject, установленный как свойство контекста в main:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
MyGlobalObject model;
engine.rootContext()->setContextProperty("myGlobalObject", &model);
}
MyTableModel, используемый в качестве модели для QML TableView:
import QtQuick 2.12
TableView {
model: myGlobalObject.myTableModel
}