在QDialog中为按键事件添加回调而不扩展类

时间:2013-08-13 11:20:16

标签: c++ qt callback

我有MainWindow QLabel,可视化一些QPixmap。我已经将QLabel类子类化了,比方说,MyVisualizer,用于处理QPixmap生成/修改/无论如何。

现在在MainWindow中,按下一个键我希望QLabel全屏,由于showFullScreen方法仅适用于Windows,我创建了一个QDialog,将myvisualizer实例移到了它,并调用QDialog::showFullScreen。然后,我想在QDialog中有另一个按键监听器用于其他一些操作。

是否可以在不对其进行子类化的情况下向QDialog添加keyPressEvent(QKeyEvent *e)回调?

2 个答案:

答案 0 :(得分:4)

是的,您可以安装eventFilter。

void QObject::installEventFilter(QObject * filterObj)

答案 1 :(得分:0)

 class KeyPressEater : public QDialog
 {
     Q_OBJECT
     ...
     KeyPressEater(Qobject paarent);
 protected:
     bool eventFilter(QObject *obj, QEvent *event);
 };
 KeyPressEater::KeyPressEater(Qobject* parent) : QDialog(parent)
{
  installEventFilter(this);
}
 bool KeyPressEater::eventFilter(QObject *obj, QEvent *event)
 {
     if (event->type() == QEvent::KeyPress) {
         QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
         qDebug("Ate key press %d", keyEvent->key());
         return true;
     } else {
         // standard event processing
         return QObject::eventFilter(obj, event);
     }
 }