QML C++信号槽不起作用

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")
      }
    }
1个回答

3
问题在于,Component.onCompleted 在你调用 QObject::connect(...) 之前发生。也就是说,在你调用 view->setSource(...) 并创建 QML 中的 Rectangle 时,Component.onCompleted 就已经被调用了,而此时信号还未连接到槽上。因此,qmlLoadedProcess() 永远不会被调用。

谢谢。但是我该如何实现这个?我需要在qml文件加载时收到一个信号。你能告诉我吗? - serkan gezer
在调用 setSource() 函数之前,您可以尝试连接到 void QDeclarativeView::statusChanged (QDeclarativeView::Status status) 信号。 - JuliusG
只是一条提示:如果您发现这个问题有帮助,您可以将其标记为已回答或投票支持。 - JuliusG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接