2011-05-24 117 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