1

基本上,我只想在用户“单击”文本字段并且按下回车键的情况下清除文本字段。经过一番研究,我发现您必须首先focusPolicy为每个小部件设置。完毕。

 dataSend_area->setFocusPolicy(Qt::ClickFocus);

从这一点开始,我迷路了。据我所知,slot当满足这些条件时,我将需要实现一个函数来实现一个自定义函数。下面给出的伪代码是我所得到的。我搜索了 Qt 文档,发现零散的信息很少,但几乎没有任何关于所有功能合并的信息。

keyPressEvent(enter/return Key){
    if ( textBox has focus )
       //do
    else
        return 
}
4

2 回答 2

1

对,你的概念或多或少是正确的。您确实需要以下操作:

1)重新实现按键事件处理程序

2)检查是否按下了回车键。

3)检查小部件是否有焦点。

但是,您不需要搞砸的是您提到的信号槽。事件与层上的信号槽的管理略有不同。

您的伪代码可以通过这种方式转换为真实代码:

#include <QKeyEvent>

...

void MyWidget::keyPressEvent(QKeyEvent *event)
{
    if (hasFocus())
        if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
            clear();
}
于 2014-05-17T18:40:33.073 回答
1

您应该覆盖 keyPressEvent 函数。这些代码可能会有所帮助。

void MainWidget::keyPressEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Return && my_text_widget->hasFocus()) {
         my_text_widget->setText("");
    }
}

这是如何覆盖事件的示例 http://programmingexamples.wikidot.com/qt-events

于 2014-05-17T18:17:13.833 回答