Derzeit habe ich das Problem, dass nicht alle meine QKeyEvents abgefangen werden. So weden zum Beispiel Qt::Key_Escape oder Qt::Key_F10 abgefangen, aber Qt::Key_{Up|Down|Left|Right} jedoch nicht. Erst dachte ich, dass es am Focus liegt, aber diesen habe ich eigentlich gesetzt.
Hier einmal der entsprechende Code
Code: Alles auswählen
#include "opengldialog.h"
#include "logfile.h"
#include <QtGui>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGLWidget>
#include <QVBoxLayout>
QGraphicsScene *scene;
QGraphicsView *view;
QGraphicsSimpleTextItem *text;
LogFile *logfile;
OpenGLDialog::OpenGLDialog(QWidget *parent) :
QDialog(parent)
{
setFocusPolicy(Qt::TabFocus);
logfile = new LogFile();
scene = new QGraphicsScene;
scene->setItemIndexMethod(QGraphicsScene::BspTreeIndex);
view = new QGraphicsView(scene);
view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
view->setFrameStyle(QFrame::NoFrame);
view->setBackgroundBrush(Qt::white);
view->setRenderHints(QPainter::Antialiasing);
text = new QGraphicsSimpleTextItem("Nichts");
scene->addItem(text);
text->setPos(50,50);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(view);
setLayout(layout);
}
void OpenGLDialog::keyPressEvent(QKeyEvent *event) {
logfile->writeToLog(event->key());
switch (event->key()) {
case Qt::Key_Left:
logfile->writeToLog("Links");
text->setText("Links");
scene->update();
view->update();
break;
case Qt::Key_Right:
logfile->writeToLog("Rechts");
text->setText("Rechts");
scene->update();
view->update();
break;
case Qt::Key_Up:
logfile->writeToLog("Hoch");
text->setText("Hoch");
scene->update();
view->update();
break;
case Qt::Key_Down:
logfile->writeToLog("Runter");
text->setText("Runter");
scene->update();
view->update();
break;
case Qt::Key_F10:
logfile->writeToLog("F10");
text->setText("F10");
scene->update();
view->update();
break;
case Qt::Key_F11:
logfile->writeToLog("F11");
text->setText("F11");
scene->update();
view->update();
break;
case Qt::Key_Escape:
logfile->writeToLog("Quit");
QApplication::quit();
break;
default:
QWidget::keyPressEvent(event);
}
}
Ich habe das Problem gelöst, ich hatte den Fokus nicht gesetzt, das geht aber nicht innerhalb des QDialog, dass muss der in dem Parent geschehen.
Code: Alles auswählen
void Menu::startOpenGLDialog()
{
OpenGLDialog *ogld = new OpenGLDialog;
ogld->showFullScreen();
ogld->setFocus();
}