setFocus(); 显示此按钮时,-6ren">
gpt4 book ai didi

c++ - 如何阻止空格键触发聚焦的 QPushButton?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:49 28 4
gpt4 key购买 nike

假设我有一个聚焦的QPushButton:

my_button = new QPushButton("Press me!", this);
my_button->setFocus();

显示此按钮时,按 Space 将触发(即单击)该按钮。我不想要这种行为。相反,我希望 Ctrl+Enter 触发按钮。

我如何在 Qt 中实现这一点?

(工作示例真的很有帮助,因为这是我的第一个 Qt 应用程序的一部分)

最佳答案

我认为最好的方法是按照 @thuga 所说的去做。这个想法是子类化 QPushButton 并重新实现 keyPressEvent()

这可能如下所示:

.h

#include <QPushButton>

class MyQPushButton final : public QPushButton
{
Q_OBJECT

public:
MyQPushButton(const QIcon icon, const QString & text, QWidget * parent = nullptr);
MyQPushButton(const QString & text, QWidget * parent = nullptr);
MyQPushButton(QWidget * parent = nullptr);

protected:
void keyPressEvent(QKeyEvent * e) override;
};

.cpp

#include <QKeyEvent>

MyQPushButton::MyQPushButton(const QIcon icon, const QString & text, QWidget * parent) : QPushButton(icon, text, parent)
{}
MyQPushButton::MyQPushButton(const QString & text, QWidget * parent) : QPushButton(text, parent)
{}
MyQPushButton::MyQPushButton(QWidget * parent) : QPushButton(parent)
{}

void MyQPushButton::keyPressEvent(QKeyEvent * e)
{
if(e->key() == Qt::Key_Return && (e->modifiers() & Qt::ControlModifier))
click();
else
e->ignore();
}

这样,Space 事件不再被处理,Ctrl + Enter 将运行 click()函数。
我已经对其进行了测试并且它运行成功。

我已经尽可能简单地编写了这个示例。当然,您可以随意调整它以使其最适合您的需求。


如果你想让它也与小键盘 Enter 键一起工作,你也可以捕获 Qt::Key_Enterif 条件类似于:

if((e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) && (e->modifiers() & Qt::ControlModifier))

关于c++ - 如何阻止空格键触发聚焦的 QPushButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58388744/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com