我正在尝试在完成创建对象时发出信号。像这样:
Component.onCompleted: mySignal()
这是在层次结构深处的QML文件中。我现在看到两种用C ++访问这个信号的解决方案。
首先是将信号传递到层次结构中,直到main.qml然后在C ++中执行此操作:
//Create a Quick View object.
QQuickView *view = new QQuickView();
//Object to access QML properties and childs.
QObject *container = (QObject *) view->rootObject();
//Connect signal and slots
QObject::connect(container, SIGNAL(mySignal()), this, SLOT(onMySignal()));
我试过并且由于某种原因没有调用插槽。它适用于我从main.qml发送和发出的所有其他信号,但不适用于从Component.onComplete发出的信号。我可以验证信号是从QML端发出的,但从未在C ++端接收过。
我尝试的第二件事是将信号传递给main.qml,我会得到一个发出我想要的信号的QML文件的引用。我试过这样做:
//Create a Quick View object.
QQuickView *view = new QQuickView();
//Object to access QML properties and childs.
QObject *container = (QObject *) view->rootObject();
//Connect signal and slots
QObject::connect(container->findChild<QObject*>("mySignalQmlFile"), SIGNAL(mySignal()), this, SLOT(onMySignal()));
其中mySignalQmlFile是主矩形的ID,其中包含在其中定义的信号。
我收到错误:
QObject :: connect:没有这样的信号QQuickRectangle_QML_54 :: mySignal()in .. \ GC \ mainwindow.cpp:62
我现在不确定如何继续。
答案 0 :(得分:1)
首次尝试时,我认为在您连接信号和插槽之前可能会发出信号,以便从未接收到信号。
第二次尝试时,您需要使用qml文件中的objectName,而不是#34; mySignalQmlFile&#34;。
我建议你阅读以下教程。
http://developer.nokia.com/community/wiki/Using_objectName_to_find_QML_elements_from_Qt
此外,在连接信号和插槽之前,需要调用或使用qml文件。否则,它将无法找到该对象,因此您将收到相同的错误。