如何将Qt中的keyPressEvent传递给基类?

时间:2014-11-24 03:40:26

标签: c++ qt keypress

QWidget :: keyPressEvent方法的Qt文档说:

  

如果重新实现此处理程序,如果不对该键执行操作,则调用基类实现非常重要。

但是,我不确定使用什么代码来确保按键传递到下一个对象以进行处理。我有一个函数 void MainWindow :: keyPressEvent(QKeyEvent * k)。如果我是"我不对该方法采取行动"?

,我该怎么做

2 个答案:

答案 0 :(得分:2)

  

如果重新实现此处理程序,如果不对该键执行操作,则调用基类实现非常重要。

在C ++中,如果要调用基类方法,可以使用::作用域操作符来执行此操作。在遵循基类实现的情况下,只需写:

return QWidget::keyPressEvent(k);

这就是“调用基类实现”的意思。

答案 1 :(得分:2)

更新:修复拼写错误,修复无限循环。

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
        }
}

希望有所帮助。