modify:回车默认ok

This commit is contained in:
2026-05-21 15:18:53 +08:00
parent e5d446b3aa
commit a794ea7574
2 changed files with 29 additions and 2 deletions
+27 -2
View File
@@ -2,6 +2,7 @@
#include "ui_numkeydia.h"
#include <QDebug>
#include <QFile>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QPushButton>
#include <QShortcut>
@@ -114,10 +115,23 @@ NumKeyDia::NumKeyDia(QWidget *parent)
for (auto *btn : btnList) {
connect(btn, &QPushButton::clicked, this, &NumKeyDia::btn_input_clicked);
btn->setFocusPolicy(Qt::NoFocus);
// 数字和符号按钮只负责屏幕点按输入,不参与对话框默认确认键竞争。
btn->setAutoDefault(false);
btn->setDefault(false);
}
auto *okShortcut = new QShortcut(QKeySequence(Qt::Key_Return), this);
connect(okShortcut, &QShortcut::activated, this, &NumKeyDia::on_btn_ok_clicked);
// 物理键盘 Enter 应默认完成输入;其余操作按钮关闭 autoDefault
// 避免 Qt 把确认键派发到退格/清空等最近获得焦点的按钮。
d->ui->btn_ok->setAutoDefault(true);
d->ui->btn_ok->setDefault(true);
d->ui->btn_back->setAutoDefault(false);
d->ui->btn_clear->setAutoDefault(false);
d->ui->btn_cancel->setAutoDefault(false);
auto *okReturnShortcut = new QShortcut(QKeySequence(Qt::Key_Return), this);
connect(okReturnShortcut, &QShortcut::activated, this, &NumKeyDia::on_btn_ok_clicked);
auto *okEnterShortcut = new QShortcut(QKeySequence(Qt::Key_Enter), this);
connect(okEnterShortcut, &QShortcut::activated, this, &NumKeyDia::on_btn_ok_clicked);
d->ui->toolButton_ico->installEventFilter(this);
d->ui->label_appInfo->installEventFilter(this);
@@ -151,6 +165,17 @@ bool NumKeyDia::eventFilter(QObject *, QEvent *event) {
return false;
}
// 数字键盘物理确认键入口:直接收口到 OK,避免 QLineEdit 或按钮默认行为把 Enter 解释成其它操作。
void NumKeyDia::keyPressEvent(QKeyEvent *event) {
if (event && (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)) {
on_btn_ok_clicked();
event->accept();
return;
}
QDialog::keyPressEvent(event);
}
void NumKeyDia::setValue(const QString &value) {
Q_D(NumKeyDia);
d->value = value;
+2
View File
@@ -28,6 +28,8 @@ public:
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
// 统一处理物理键盘确认键,保证主键盘 Enter 和小键盘 Enter 都等价于点击 OK。
void keyPressEvent(QKeyEvent *event) override;
private slots:
void on_btn_ok_clicked();