Qt 笔记
1. 控件的 eventFilter
如下代码,将为edtCleanCount
部件安装一个事件过滤器,当用户按下Up
或Down
键时,并且参数obj
为edtCleanCount
时,会自动修改edtCleanCount
的值。 也可以继承QLineEdit
类,重写keyPressEvent
方法,实现相同的功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// eventFilter 声明
// bool eventFilter(QObject* obj, QEvent* event) override;
// init
void MyDialog::init() {
// 设置只允许edtCleanCount输入数字
QValidator* validator = new QRegExpValidator(QRegExp("[0-9]+"), this);
ui->edtCleanCount->setValidator(validator);
//在编辑器部件安装事件过滤器
ui->edtCleanCount->installEventFilter(this);
}
bool MyDialog::eventFilter(QObject* obj, QEvent* event) {
if (obj == ui->edtCleanCount && event->type() == QEvent::KeyPress) {
QKeyEvent* key_event = static_cast<QKeyEvent*>(event);
const auto key = key_event->key();
if (key == Qt::Key_Up || key == Qt::Key_Down) {
auto flag = (key == Qt::Key_Up) ? 1 : -1;
auto clean_count = ui->edtCleanCount->text().toInt() + flag;
clean_count = std::max(clean_count, 0); // 最小值为0
ui->edtCleanCount->setText(QString::number(clean_count));
return true;
}
}
return QWidget::eventFilter(obj, event);
}
本文由作者按照 CC BY 4.0 进行授权