Слот сигнала qml С++ не работает

В приведенном ниже коде C++ я загружаю файл qml. Но слот С++ не работает. Никаких ошибок или предупреждений не возникает, но отладочное сообщение всегда представляет собой символ «a». Символ "b" не появляется. Ты можешь сказать мне, почему? Спасибо.

побочный код С++

    ::::::::::::::
    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")
      }
    }

person serkan gezer    schedule 01.11.2012    source источник


Ответы (1)


Проблема в том, что Component.onCompleted происходит до того, как вы вызвали QObject::connect(...). т.е. Прямоугольник в qml создается, когда вы вызываете view->setSource(...), а Component.onCompleted вызывается перед подключением сигнала к слоту. Поэтому qmlLoadedProcess() никогда не вызывается.

person JuliusG    schedule 01.11.2012
comment
Спасибо. Но как я могу этого добиться? Мне нужен сигнал при загрузке файла qml. Можете ли вы сказать мне, пожалуйста? - person serkan gezer; 01.11.2012
comment
Вы можете попробовать подключиться к void QDeclarativeView::statusChanged ( статус QDeclarativeView::Status ) перед вызовом setSource() - person JuliusG; 01.11.2012
comment
Просто примечание: вы можете пометить ответ на вопрос или проголосовать за него, если сочтете его полезным. - person JuliusG; 01.11.2012