当且仅当文本框具有焦点并且按下“输入”时才实现插槽功能?

Posted

技术标签:

【中文标题】当且仅当文本框具有焦点并且按下“输入”时才实现插槽功能?【英文标题】:Implementing a slot function if and only if a a text box has focus and "enter" is pressed? 【发布时间】:2014-05-17 18:06:19 【问题描述】:

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

 dataSend_area->setFocusPolicy(Qt::ClickFocus);

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

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

【问题讨论】:

【参考方案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

【讨论】:

也许if(event->key() == Qt::Key_Return && my_text_widget.hasFocus()) ? 我正在这样做,但收到一个无法解释的 invalid use of incomplete type 'class QKeyEVent' 错误。感谢您的帮助! 添加#include <QKeyEvent> 嗯,就是这样!谢谢!【参考方案2】:

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

1) 重新实现key press event handler。

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

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

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

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

#include <QKeyEvent>

...

void MyWidget::keyPressEvent(QKeyEvent *event)

    if (hasFocus())
        if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
            clear();

【讨论】:

enterreturn 键之间有区别吗?它可能与不同的平台有关吗? @sherrellbc:enter 通常位于键盘上。有关详细信息,请参阅以下内容:qt-project.org/doc/qt-5/qt.html#Key-enum 您要求返回并输入,所以我假设这就是您的意思。有些人更喜欢使用那个输入,所以恕我直言,如果应用程序支持它会更好,否则你会很快收到用户的投诉。 :) 我没有台式机,也没有带键盘的笔记本电脑,所以我不知道。这是一个有趣的观点,我的印象是输入/返回键是对同一个键的可互换引用。 @sherrellbc:这取决于你如何定义它们。在 Qt 上下文中,这似乎是基于官方文档的差异。我个人认为它们是可以互换的,所以我个人会将该项目命名为更具描述性。顺便说一句,我认为您将能够摆脱 hasFocus() 调用,因为只有在您拥有焦点时才会调用此方法,前提是 myWidget 是您的文本小部件的子类。 我不确定你最后的陈述。也许我们没有考虑同样的事情,因为我看不出keyPressEventfocusEvent 之间有任何联系。

以上是关于当且仅当文本框具有焦点并且按下“输入”时才实现插槽功能?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate HQL:当且仅当所有子实体都具有相同值的属性时,如何选择父实体?

仅当 Validation 为 True 时才启用 Jbutton

仅当窗口处于焦点时才查找按键

强制 Emacs 使用特定的编码,当且仅当这不会导致问题

检测特定文本框是不是有焦点[重复]

HTML5 表单验证