2013-07-22 131 views
4

我有信號被髮射,然後捕獲在QML;然而,當我嘗試讀取附加到信號的參數時,我會得到「未定義」。以下是一些代碼片段。感謝您提前幫忙!接收CML信號QML

mymodel.h

class MyModel : public QObject 
{ 
    Q_OBJECT 

    ... 

    signals: 
     void mySignal(float a, some::enum b) 

    ... 
} 

mymodel.cpp

做些事情來發出信號(這不是一個問題,只需emit mySignal(1.0, 2.0);

someotherclass.cpp

無效SomeOtherClass :: setupQML() { ...

QQuickView *view = new QQuickView(); 

QWidget *container = QWidget::createWindowContainer(view); 

... 

QmlRootData = new RootData(); 

view->rootContext()->setContextObject(QmlRootData); 
view->rootContext()->setContextProperty("MyModel", model); 
view->setSource(QUrl("main.qml")); 
view->setResizeMode(QQuickView::SizeRootObjectToView); 

QObject* rootObj = view->rootObject(); 

... 

}

main.qml

Rectangle { 
    Connections { 
     target: MyModel 
     onMySignal: console.log(a) 
    } 
} 

上面console.log(a)得到預期時調用;然而,我期望輸出爲「1.0」,但它只是說「未定義」,我不知道爲什麼。我正在使用Qt 5.1和Qt Quick 2.0。

回答

6

這可能是枚舉參數在將參數綁定到QML信號處理程序的上下文的過程中導致錯誤。既然它看起來並沒有將這個枚舉作爲QML類型公開,我不認爲它可以正確地將它轉換爲qml,這可能會打破整個過程。

鑑於您在發射信號時傳遞了兩個浮點數,實際上應該是兩個浮點數輸入而不是浮點數和枚舉嗎?

+1

是的,你是對的。我拿出枚舉並且信號按預期工作。這是令人失望的,因爲我想我必須同時發出一個單獨的信號來發射。這是一個錯誤,當這篇文章與兩個浮動,在我的代碼中它是正確的浮動和枚舉。有沒有辦法將枚舉暴露給QML? – roundtheworld

+0

http://stackoverflow.com/questions/4461017/exposing-qts-q-enums-to-qml 似乎相關。不要忘記標記答案已解決!祝你好運! – Deadron