簡體   English   中英

如何將Qt中的keyPressEvent傳遞給基類?

[英]How to pass keyPressEvent in Qt to base class?

QWidget :: keyPressEvent方法的Qt文檔說:

如果重新實現此處理程序,那么如果不對鍵進行操作,則調用基類實現非常重要。

但是,我不確定使用什么代碼來確保將按鍵傳遞給下一個對象以對其進行處理。 . 我有一個函數 如果我“不按鑰匙操作”,該如何處理?

如果重新實現此處理程序,那么如果不對鍵進行操作,則調用基類實現非常重要。

在C ++中,如果要調用基類方法,請使用::作用域運算符進行調用。 為了順應基類的實現,只需編寫:

return QWidget::keyPressEvent(k);

這就是“調用基類實現”的意思。

更新:修正了錯字,以修復無限循環。

mainwindow.h

#include <QMainWindow>
#include <QKeyEvent>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget * parent = 0);
    ~MainWindow();
public slots:
    void keyPressEvent(QKeyEvent*);
    void keyReleaseEvent(QKeyEvent*);
//...
}

mainwindow.cpp

#include <QDebug>
#include "mainwindow.h"

void MainWindow::keyPressEvent(QKeyEvent* ke)
{
        qDebug() << Q_FUNC_INFO;
        qDebug() << "mw" << ke->key() << "down";
        QMainWindow::keyPressEvent(ke); // base class implementation
}

void MainWindow::keyReleaseEvent(QKeyEvent* ke)
{
        qDebug() << Q_FUNC_INFO;
        qDebug() << "mw" << ke->key() << "up";
        if(ke->key() == Qt::Key_Back)// necessary for Q_OS_ANDROID
        {
                // Some code that handles the key press I want to use
                // Note: default handling of the key is skipped
                ke->accept();
                return;
        }
        else
        {
                // allow for the default handling of the key
                QMainWindow::keyReleaseEvent(ke); // aka the base class implementation
        }
}

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM