QML可见属性 in Grid delete Item

QML visible property in Grid delete Item

我正在尝试在 Qt4.8 上使用以下代码创建一个 QML 键盘。

Item {
    id: keyboard
    property string keys: "azertyuiopqsdfghjklmwxcvbn****^<"

    Rectangle {
        height: parent.height
        width: parent.width

        Grid {
            id: keyboardGrid

            rows: 4
            columns: 10
            spacing: 1

            Repeater {
                model: keys.length

                KeyboardButton {
                     visible: { (keys.charAt(index) == "*") ? false : true; }
                    btnKeyText: keys.charAt(index);                    
                }
            }
        }
    }
}

我在键中放了一些“*”,以便让一些不可见的按钮转到网格的下一行,但是当我将 KeyboardButton 设置为 visible = false 时,QML 解释器会忽略它.

查看屏幕截图了解更多详情,第一个是这段代码,第二个是当我评论我将可见设置为 false 的行时。

为什么不可见的组件被忽略了?有什么技巧吗?

As BaCaRoZzo says, element with opacity: 0 or visibility: 0 element is not rendered (in Qt4.8, in 5 and superior opacity : 0 does not affect rendering), 所以我找到了另一种方法来做我想做的事。

我通过使用 RepeaterRow 创建自己的网格来实现此目的,如下所示:

Item {
    id: keyboard
    property variant keys: ["azertyuiop", "qsdfghjklm", "wxcvbn,;:!", "⇧* ↵←"]

    Repeater{
        id: lineRpt
        model: 4

        anchors.fill: parent

        Row {
            spacing: 1

            anchors.verticalCenter: parent.top
            anchors.verticalCenterOffset: 25+(index*52)

            anchors.left: parent.left

            property string currentLine: keys[index]

            Repeater {
                model: keys.length

                KeyboardButton {
                     visible: { (keys.charAt(index) == "*") ? false : true; }
                    btnKeyText: keys.charAt(index);                    
                }
            }
        }
    }
}

评论后编辑:

你也可以将背景颜色设置为透明,在我的例子中,我也需要删除文本的de“*”。