在下面的C ++代码中,我加载了一个qml文件。但是c ++插槽无法正常工作。没有出现错误或警告,但调试消息始终是“a”字符。没有“b”字符出现。你能告诉我为什么吗?感谢。
c ++边码
::::::::::::::
view=new QDeclarativeView;
view->setSource(QUrl("qml/groundMenu/Ground.qml"));
rootObject = dynamic_cast<QObject*>(view->rootObject());
QObject::connect(rootObject, SIGNAL(qmlSignal()),this, SLOT(qmlLoadedProcess()));
:::::::::::::::::
void MainWindow::qmlLoadedProcess()
{
qDebug()<<"b";
}
//qml side code
Rectangle
{
signal qmlSignal()
Component.onCompleted:
{
qmlSignal()
console.log("a")
}
}
答案 0 :(得分:3)
问题是 Component.onCompleted 在您调用 QObject :: connect(...)之前发生。即调用 view-&gt; setSource(...)时会创建qml中的Rectangle,并在将信号连接到插槽之前调用 Component.onCompleted 。所以 qmlLoadedProcess()永远不会被调用。