2012-11-01 3 views
3

아래의 C++ 코드에서 qml 파일을로드합니다. 하지만 C++ 슬롯이 작동하지 않습니다. 오류 또는 경고는 발생하지 않지만 디버그 메시지는 항상 "a"문자입니다. "b"문자가 나타나지 않습니다. 왠지 말해줘? 감사.qml C++ 신호 슬롯이 작동하지 않습니다.

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

답변

3

문제는 당신이 QObject를 :: 연결 (...)를 호출하기 전에 발생 Component.onCompleted 것입니다. 나는. 신호를 슬롯에 연결하기 전에 view-> setSource (...)Component.onCompleted을 호출하면 qml의 사각형이 만들어집니다. 따라서 qmlLoadedProcess()이 호출되지 않습니다.

+0

감사합니다. 그러나 어떻게 이것을 할 수 있습니까? qml 파일이로드되면 신호가 필요합니다. 제발 말해 줄래? –

+0

** setSource를 호출하기 전에 [void QDeclarativeView :: statusChanged (QDeclarativeView :: Status status)] (http://doc.qt.digia.com/qt/qdeclarativeview.html#statusChanged) 신호에 연결을 시도 할 수 있습니다() ** – JuliusG

+0

JuliusG 대단히 감사합니다. 그것은 작동합니다! –

관련 문제