让我们考虑一下这个代码片段:
ApplicationWindow
{
/**/
states: State {}
/**/
}
当运行应用程序时,我得到
Cannot assign to non-existent property "states"
在使用
ApplicationWindow
{
/**/
Item { states: State {} }
/**/
}
没有错误。为什么不能在ApplicationWindow
中使用states
我刚刚意识到ApplicationWindow
继承了Window
继承了QQuickWindow
。只有从Item
继承的类型才具有states
属性。
解决方法是使用StateGroup
。
请随意添加更好的解决方案;)
我能够使用Qt v5.11在QML ApplicationWindow中编码状态,有两个注意事项。一个是Qt Creator v4.6.1编辑器用警告标记SignalTransition,表示状态不能有子项。尽管有这样的警告,http://doc.qt.io/qt-5/qmlstatemachine.html#a-simple-state-machine上的示例代码仍然可以正确地构建和运行。第二个警告是Qt Creator编辑器忽略了major。导入qtqml . statemmachine的小版本。我输入的不是1.11的任何数字都被接受了:
import QtQuick 2.11
import QtQuick.Controls 1.4
import QtQml.StateMachine 1.11
ApplicationWindow {
...