“ visible:false”语句在Windows上不起作用,但在Linux上起作用

时间:2018-11-01 10:29:11

标签: qt qml

在Qt 5.11.2上,我有一个这样的QML项目:

Menu {
    MenuItem {
        visible: false // Works on Linux, however doesn't work on Windows!!!
        enabled: true
        text: qsTr("First menu item") + emptyString
        onTriggered: doSomething()
    }
}

我不知道为什么visible: false语句在Linux上有效,而在Windows下。我的意思是,在Linux上,菜单项实际上是不可见的,但是在Windows上,菜单项是可见的,就像visible: false语句在Windows上被忽略一样。有人可以帮忙吗?

更新0

如@teh_raab所建议,我在代码中使用了Component.onCompleted。令人惊讶的是,qml记录了qml: Visible: false,但是菜单项在Windows上仍然可见:

    MenuItem {
        visible: false
        Component.onCompleted: {
            this.visible = false;
            console.log("Visible: ", visible); // logs `qml: Visible:  false`
                                             // But menu item is still visible!!!
        }
        enabled: true
        text: qsTr("First menu item") + emptyString
        onTriggered: doSomething()
    }

更新1

问题最终通过以下代码得以解决,该代码非常奇怪

    MenuItem {
        visible: true // When this is set `true`, the menu item gets hidden on Windows!!!
        Component.onCompleted: {
            this.visible = false; // Now this statement actually works!!!
            console.log("Visible: ", visible); // logs `qml: Visible:  false`

        }
        enabled: true
        text: qsTr("First menu item") + emptyString
        onTriggered: doSomething()
    }

1 个答案:

答案 0 :(得分:1)

我自己还没有看到这个。如果在MenuItem-> Component.onCompleted中将可见性设置为false,是否仍会显示?