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

时间:2011-08-12 19:12:47

标签: qt keyboard focus virtual

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

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

1 个答案:

答案 0 :(得分: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);
}

这可能足以达到你想要的效果。