基本上,我只想清除文本字段,前提是用户已“单击”文本字段并且已按下输入/返回键。经过一番研究,我发现您必须首先为每个小部件设置
focusPolicy
。完毕。
dataSend_area->setFocusPolicy(Qt::ClickFocus);
从这一点上我迷失了。据我所知,我需要实现一个
slot
函数来在满足这些条件时实现自定义函数。下面提供的伪代码是我所了解的。我搜索了 Qt 文档,发现了一些分散的信息,但几乎没有任何关于所有功能合并的信息。
keyPressEvent(enter/return Key){
if ( textBox has focus )
//do
else
return
}
您应该重写 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
是的,你的概念或多或少是正确的。您确实需要采取以下行动:
重新实现按键事件处理程序。
检查是否按下了Enter/Return键。
检查小部件是否获得焦点。
但是,您不需要搞乱的是您提到的信号槽。层上信号槽的事件管理方式略有不同。
你的伪代码可以这样变成真正的代码:
#include <QKeyEvent>
...
void MyWidget::keyPressEvent(QKeyEvent *event)
{
if (hasFocus())
if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
clear();
}