QWidget :: keyPressEvent方法的Qt文档说:
如果重新实现此处理程序,如果不对该键执行操作,则调用基类实现非常重要。
但是,我不确定使用什么代码来确保按键传递到下一个对象以进行处理。我有一个函数 void MainWindow :: keyPressEvent(QKeyEvent * k)。如果我是"我不对该方法采取行动"?
,我该怎么做答案 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
}
}
希望有所帮助。