我一直在尝试在Qml文件和c ++之间连接信号,但c ++中的公共插槽似乎没有收到信号。 我的计划可能出现什么问题?
main.qml
Item{
id:item
signal qml_signal
Button{
onClicked: {
item.qml_signal();
}
}
}
的main.cpp
QQuickView view(QUrl("qrc:/main.qml"));
QObject *item = view.rootObject();
Myclass myclass;
QObject::connect(item, SIGNAL(qml_signal()), &myclass,SLOT(cppSlot()));
myclass.h
void cppSlot() ;
myclass.cpp
void Myclass::cppSlot(){
qDebug() << "Called the C++ slot with message:";
}
答案 0 :(得分:1)
当您希望对象在C ++和QML之间进行交互时,您必须在QML端进行,因为从C ++获取QML对象会导致许多问题,因为在这种情况下,无法处理在QML中创建的信号在C ++中。
&#xA;&#xA;解决方案是将对象 myclass
导出到QML并在那里建立连接:
main.cpp
&#xA;&#xA; #include“myclass.h”&#xA;&#xA;#包括&lt; QGuiApplication&gt;&#xA; #include&lt; QQuickView&gt;&#xA; #include&lt; QQmlContext&gt;&#xA;&#xA; int main(int argc,char * argv [])&#xA; { &#XA; QCoreApplication ::的setAttribute(Qt的:: AA_EnableHighDpiScaling);&#XA;&#XA; QGuiApplication app(argc,argv);&#xA;&#xA; QQuickView视图(QUrl(“qrc:/main.qml”));&#xA; Myclass myclass;&#xA; view.rootContext() - &gt; setContextProperty(“myclass”,&amp; myclass);&#xA;&#xA; view.show();&#XA;返回app.exec();&#xA;}&#xA;
&#xA;&#xA; main.qml
& #xA;&#xA; import QtQuick 2.9&#xA; import QtQuick.Controls 1.4&#xA;&#xA; Item {&#xA; ID:项目&#XA;信号qml_signal&#xA;按钮{&#XA; onClicked:item.qml_signal()&#xA; }&#XA; onQml_signal:myclass.cppSlot()&#xA;}&#xA;
&#xA;