为盲人打字培训师选择合适的QML课程

Choose right QML class for blind typing trainer

提问人:EL96cpp 提问时间:9/26/2023 最后编辑:EL96cpp 更新时间:9/27/2023 访问量:57

问:

我正在开发QML盲打训练器,但不知道我应该使用哪个QML类来显示文本。我需要某种文本编辑器,光标固定在特定位置,当用户输入正确的符号时,整个文本会向左移动一个符号。

为此,我已经尝试了 TextEdit 和 TextArea,但我无法弄清楚如何使它们工作。 以下是我想要实现的行为示例: 示例

C++ QML 文本编辑器

评论

0赞 iam_peter 9/26/2023
可能最简单的方法是实现自定义控件。如果您直接在C++或QML中执行此操作,则取决于您的需求。

答:

0赞 folibis 9/26/2023 #1

我认为这在这里绝对没用,因为你实际上并没有编辑文本。如上所述@iam_peter您可能必须自己实现控制。TextEdit

例如,像这样:

Window {
    id: window
    visible: true
    width: 600
    height: 400
    title: "Typing trainer"

    Rectangle {
        id: outer
        height: 40
        width: 400
        anchors.centerIn: parent
        radius: 5
        border.width: 2
        border.color: "#999"
        color: "#eaf2f8"
        clip: true
        focus: true

        Keys.onPressed: (event)=>
                        {
                            var ch = event.text;
                            if(ch === container.getChar())
                            {
                                container.position ++;
                            }
                        }

        Row
        {
            id: container
            property string text: "The quick brown fox jumps over the lazy dog"
            property int position: 0
            x: (outer.width / 2 - metrics1.width)

            function getChar()
            {
                return container.text[container.position];
            }

            Text {
                id: block1
                text: container.text.substring(0, container.position)
                font.pointSize: 24
                color: "#333"
            }
            TextMetrics {
                id: metrics1
                text: block1.text
                font: block1.font
            }
            Text {
                id: block2
                text: container.text.substring(container.position)
                font.pointSize: 24
                color: "#999"
            }
        }
    }
}

评论

0赞 GrecKo 9/27/2023
吹毛求疵:行,可能只是绑定,这里不需要函数。xnextChar
0赞 folibis 9/27/2023
你是绝对正确的,谢谢@GrecKo,我已经更新了代码