当且仅当文本框具有焦点并且按下“enter”键时才实现槽函数?

问题描述 投票:0回答:2

基本上,我只想清除文本字段,前提是用户已“单击”文本字段并且已按下输入/返回键。经过一番研究,我发现您必须首先为每个小部件设置

focusPolicy
。完毕。

 dataSend_area->setFocusPolicy(Qt::ClickFocus);

从这一点上我迷失了。据我所知,我需要实现一个

slot
函数来在满足这些条件时实现自定义函数。下面提供的伪代码是我所了解的。我搜索了 Qt 文档,发现了一些分散的信息,但几乎没有任何关于所有功能合并的信息。

keyPressEvent(enter/return Key){
    if ( textBox has focus )
       //do
    else
        return 
}
c++ qt qwidget qtgui qevent
2个回答
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


1
投票

是的,你的概念或多或少是正确的。您确实需要采取以下行动:

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

  2. 检查是否按下了Enter/Return键。

  3. 检查小部件是否获得焦点。

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

你的伪代码可以这样变成真正的代码:

#include <QKeyEvent>

...

void MyWidget::keyPressEvent(QKeyEvent *event)
{
    if (hasFocus())
        if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
            clear();
}
© www.soinside.com 2019 - 2024. All rights reserved.