[gelöst] QKeyEvent fängt nicht alle Tasteneingaben ab
Verfasst: 31. Mai 2010 13:26
Hallo,
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
EDIT:
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.
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();
}