简体   繁体   English

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

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

I want to track when the enter/return key is pressed and then to focus on some other widget but if it's not pressed than spinbox should take normal action instead of anything else. 我想跟踪何时按下回车键或回车键,然后将焦点集中在其他某个小部件上,但是如果未按下该小部件,则spinbox应该采取常规措施而不是其他措施。 I've subclassed QSpinBox and created protected void keyPressEvent(QKeyEvent *event). 我已经将QSpinBox子类化,并创建了受保护的void keyPressEvent(QKeyEvent * event)。 Inside it is this code: 里面是这段代码:

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

This code should work, but it doesn't. 这段代码应该可以,但是不能。 I don't know what's wrong, but when I focus on promoted spinbox and try to change number in it, it just won't work, I only get the debug message printed. 我不知道出了什么问题,但是当我专注于升级的Spinbox并尝试更改其中的数字时,它将无法正常工作,我只会看到调试信息。 If I push enter/return key than it print debug message and focus on some other widget which I set in editingFinished(). 如果我按Enter / Return键,它将打印调试消息并关注我在editFinished()中设置的其他小部件。

What am I doing wrong? 我究竟做错了什么?

If you need to invoke default processing of the event, you need to call base class implementation: 如果需要调用事件的默认处理,则需要调用基类实现:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM