I've created a Qt Quick 2.5 app and connected signals and slots to my C++ module,
I only can send signals from C++ and activate QML slots, but I can't receive QML signals on Qt side.
Here is main.cpp:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
AlfredApp(engine.rootObjects().first());
return app.exec();
}
here is my QML code which holds the signal:
MouseArea {
id: mainButtonMouseArea
objectName: "mainButtonMouseArea"
anchors.fill: parent
signal signalClicked()
onClicked: {
console.log("clicked")
signalClicked()
}
}
I always get the console message from QML when I click on the MouseArea.
Here is my c++ constructor:
AlfredApp::AlfredApp(QObject* viewRootObject, QObject* parent)
: QObject(parent), d(new Private)
{
d->viewRootObject = viewRootObject;
d->viewMainButton = viewRootObject->findChild<QObject*>("mainButton");
d->viewMainButtonIcon = viewRootObject->findChild<QObject*>("mainButtonIcon");
d->viewMainButtonMouseArea = viewRootObject->findChild<QObject*>("mainButtonMouseArea");
// Signals/Slots connection
connect(d->viewMainButtonMouseArea, SIGNAL(signalClicked()),
this, SLOT(mainButtonClicked()));
connect(this, SIGNAL(signalListening()),
d->viewMainButtonIcon, SLOT(listening()));
connect(this, SIGNAL(signalProcessing()),
d->viewMainButtonIcon, SLOT(processing()));
}
Here is my slot that never gets called:
void AlfredApp::mainButtonClicked()
{
qDebug() << "Main Button Clicked";
}
BTW, are there some qml code examples that have slots/function that respond normally to C++ signals
true- Mohamed Anwer#include "main.moc"at the end of main.cpp). - hyde