我想跟踪何时按下回车键或回车键,然后将注意力集中在其他一些小部件上,但是如果未按下该小部件,则spinbox应该采取常规措施而不是其他措施。我已经将QSpinBox子类化,并创建了 protected 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键,则它将打印调试消息,并专注于我在editFinished()中设置的其他小部件。

我究竟做错了什么?

最佳答案

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

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

10-02 00:52