2011-05-24 73 views
3

我有一個MouseArea,調用一個信號, 我把這個信號插入一個插槽,它的工作,我的C++代碼正在運行。QT QML改變狀態C++

但是在C++代碼裏面可以改變QML狀態嗎?

代碼按鈕調用信號(OK):

我的狀態
MouseArea { 
        anchors.fill: parent 
        onClicked: { 
         inscriptionCarre.qmlSignalButtonInscription("Button"); 
        } 
       } 

代碼:

states: [ 
    State { 
     name: "start"; 
     PropertyChanges { target: home; x: -master.width; } 
     PropertyChanges { target: login; x:0; } 
    }, 
    State { 
     name: "loginOK"; 
     PropertyChanges { target: login; x: -master.width; } 
     PropertyChanges { target: liste; x:0; } 
    } 
] 

我想我的插槽(C++代碼)改變狀態爲 「loginOK」 裏面,可能嗎 ?

感謝

回答

7

由於狀態是項目屬性,你應該能夠修改它,像這樣:

QDeclarativeEngine engine; 
QDeclarativeComponent component(&engine, "MyItem.qml"); 
QObject *object = component.create(); 
object->setProperty("state", "loginOK"); 

參考:http://qt-project.org/doc/qt-4.8/qtbinding.html#modifying-properties

或者從你的C++插槽,你可以發出一個信號它將狀態字符串傳遞給一個QML插槽,該插槽依次設置狀態。例如像:

C++的文件:

... 
signals: 
    void stateChanged(const QString &newState); 
... 

QML文件:

... 
MyItem { 
    onStateChanged: { 
     state: newState 
    } 
} 
... 
+0

問題:我想你做'發射stateChanged( 「loginOK」);'後'對象 - >的setProperty( 「狀態」,「loginOK」);'。您沒有提及如何將信號綁定到QML插槽。你能否提供這些信息?我使用'Connections {...}'將C++信號連接到QML插槽,但在這種情況下,這不會觸發UI中的更改(因爲在我的情況下,基於新狀態項目會發生變化(例如'color ''Rectangle'項目),只有在使用'Connections {...}'時纔會觸發該插槽,否則沒有任何反應,任何想法? – rbaleksandar 2016-08-17 11:33:54

+0

Nevermind。我設法修復它。確實在最新的Qt中,必須使用'Connections'項,但是當從C++調用時,列表中所有可見項的狀態都會發生變化,爲了防止必須指定只有'currentItem.state'需要設置爲新狀態。 – rbaleksandar 2016-08-17 11:48:14