我有MainWindow
QLabel
,可视化一些QPixmap
。我已经将QLabel类子类化了,比方说,MyVisualizer,用于处理QPixmap生成/修改/无论如何。
现在在MainWindow中,按下一个键我希望QLabel全屏,由于showFullScreen
方法仅适用于Windows,我创建了一个QDialog
,将myvisualizer实例移到了它,并调用QDialog::showFullScreen
。然后,我想在QDialog中有另一个按键监听器用于其他一些操作。
是否可以在不对其进行子类化的情况下向QDialog添加keyPressEvent(QKeyEvent *e)
回调?
答案 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);
}
}