Qt5 C++:子类化 QSpinBox 和 keyPressEvent 不起作用

Qt5 C++: Subclassing QSpinBox and keyPressEvent won't work

本文关键字:keyPressEvent 不起作用 QSpinBox C++ 子类 Qt5      更新时间:2023-10-16

我想跟踪输入/返回键被按下的时间,然后关注其他小部件,但如果它没有被按下,那么spinbox应该采取正常的行动,而不是其他任何事情。我已经子类化了QSpinBox并创建了受保护的void keyPressEvent(QKeyEvent *event)。里面是这样的代码:

void MytSpinBox::keyPressEvent(QKeyEvent *event) {
    if (event->key() == Qt::Key_Return) {
        qDebug() << "return pressed";
        editingFinished();
    } else {
        qDebug() << "Other key";
        event->accept();
    }
}

这段代码应该可以工作,但是它没有。我不知道出了什么问题,但是当我专注于提升spinbox并试图改变其中的数字时,它就是不起作用,我只得到调试消息打印。如果我按enter/return键,它会打印调试消息,并专注于我在editingFinished()中设置的其他小部件。

我做错了什么?

如果需要调用事件的默认处理,则需要调用基类实现:

void MytSpinBox::keyPressEvent(QKeyEvent *event) {
    if (event->key() == Qt::Key_Return) {
        qDebug() << "return pressed";
        editingFinished();
    } else {
        QSpinBox::keyPressEvent(event);
    }
}