无法使用 ApplicationWindow 的状态

Unable to use states with ApplicationWindow

让我们考虑一下这个代码片段:

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,表明 State 不能有子项。尽管有该警告,http://doc.qt.io/qt-5/qmlstatemachine.html#a-simple-state-machine 中示例中的代码仍能正确构建和运行。第二个警告是 Qt Creator 编辑器忽略了导入 QtQml.StateMachine 的 major.minor 版本。我输入的任何数字而不是 1.11 都被接受:

import QtQuick 2.11
import QtQuick.Controls 1.4
import QtQml.StateMachine 1.11

ApplicationWindow {
    ...