2012-11-01 138 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

的問題是,Component.onCompleted情況,您得叫的QObject ::連接(...)之前。即當您將信號連接到插槽之前調用視圖 - >設置源(...)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非常感謝你。有用 ! –