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

問題は、 QObject::connect(...)を呼び出す前にComponent.onCompletedが発生することです。つまり、view- >setSource(...)を呼び出すと qml の Rectangle が作成され、信号をスロットに接続する前にComponent.onCompletedが呼び出されます。したがって、qmlLoadedProcess()が呼び出されることはありません。

于 2012-11-01T12:44:21.613 に答える