首页 文章

Qt焦点处理仅由UDLR按钮操作的虚拟键盘

提问于
浏览
2

我在Qt / Embedded设备上有一个数据输入屏幕,它只有上/下/左/右/选择按钮 . 屏幕看起来像一个顶部有QLineEdit的计算器和一组QPushButtons . UDLR按钮围绕QPushButtons移动焦点,然后选择将按钮的编号附加到QLineEdit . 这非常有效 . 但是,由于QLineEdit没有焦点,因此文本输入光标不会闪烁 . QLineEdit看起来不像是按下虚拟键盘按钮的接收者,这并不好 .

我见过的其他Qt虚拟键盘实现不需要他们的键盘按钮来获得焦点,因为它们是触摸或鼠标操作 . 因此,QLineEdit可以在整个时间内保持焦点 . 这不是一个选择 . 到目前为止,我见过的最好的是手动生成焦点事件,以诱使QLineEdit认为当用户真正在虚拟键盘上导航时它具有焦点 . 我希望有一个更优雅的解决方案或者可能采用不同的方式来构建屏幕的实现,以避免这个问题 . 有任何想法吗?

1 回答

  • 1

    由于您似乎不需要 QLineEdit 的真正编辑功能,因此请将其替换为 QLabel . 您可以将其嵌套在框架内,使其看起来像一个编辑框 . 然后,您可以使用不需要焦点工作的 QTimer 来模拟闪烁的光标 .

    以500ms的间隔启动计时器并在计时器插槽中插入或删除“|”像这样的人物:

    void MainWindow::slot_timeout()
    {
        QString labelText = label->text();    
        if(labelText.right(1) == "|")
        {
            labelText = labelText.left(labelText.size()-1);
        }
        else
        {
            labelText += "|";
        }    
        label->setText(labelText);
    }
    

    按下选择按钮时,在字符串的前面插入相应的字符,使闪烁的光标停留在右端 .

    void MainWindow::slot_selectClick()
    {
        QString labelText = label->text();
        labelText.prepend("x");
        label->setText(labelText);
    }
    

    它可能足以实现您正在寻找的效果 .

相关问题