modify:回车默认ok
This commit is contained in:
+27
-2
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user