Согласно документации Qt5: методы раскрытия, включая слоты qt, все общедоступные слоты классов C ++, которые наследуются от QObject, доступны из QML. Вот что я сделал:
C ++
class MyClass : public QObject
{
Q_OBJECT
public slots:
void doStuffFromQmlSlot()
{
qDebug() << Q_FUNC_INFO;
}
public:
MyClass()
{
qDebug() << Q_FUNC_INFO;
}
};
[d4 ] my C ++ содержит: MyClass myClass;
QQmlEngine engine;
engine.rootContext()->setContextProperty( "myclass", &myClass );
QQmlComponent component( &engine, QUrl::fromLocalFile("qml/qtquick-01/main.qml") );
component.create();
QML
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
myclass.doStuffFromQmlSlot();
Qt.quit();
}
}
}
На самом деле QtCreator, по-видимому, распознает открытый объект QML в QML, поскольку он включает автозаполнение имени класса (myclass) и общедоступного слота doStuffFromQmlSlot (). Когда я запускаю приложение, я, к сожалению, получил следующую ошибку:
ReferenceError: myclass не определен
Любая подсказка о том, что я делаю неправильно?