4

在下面的 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")
      }
    }
4

1 回答 1

3

问题是Component.onCompleted在您调用QObject::connect(...)之前发生。即,当您调用view->setSource(...)时会创建 qml 中的 Rectangle,并且在将信号连接到插槽之前调用Component.onCompleted 。所以qmlLoadedProcess()永远不会被调用。

于 2012-11-01T12:44:21.613 回答