From a794ea757448b4031febb8a8a5d1f2d8b774526f Mon Sep 17 00:00:00 2001 From: Tian <1203886034@qq.com> Date: Thu, 21 May 2026 15:18:53 +0800 Subject: [PATCH] =?UTF-8?q?modify=EF=BC=9A=E5=9B=9E=E8=BD=A6=E9=BB=98?= =?UTF-8?q?=E8=AE=A4ok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- numkeydia.cpp | 29 +++++++++++++++++++++++++++-- numkeydia.h | 2 ++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/numkeydia.cpp b/numkeydia.cpp index 84b1c79..8be2553 100644 --- a/numkeydia.cpp +++ b/numkeydia.cpp @@ -2,6 +2,7 @@ #include "ui_numkeydia.h" #include #include +#include #include #include #include @@ -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; diff --git a/numkeydia.h b/numkeydia.h index c20d152..cf3357a 100644 --- a/numkeydia.h +++ b/numkeydia.h @@ -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();