Seite 1 von 1

[gelöst] QKeyEvent fängt nicht alle Tasteneingaben ab

Verfasst: 31. Mai 2010 13:26
von t_b
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

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);
    }
}
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.

Code: Alles auswählen

void Menu::startOpenGLDialog()
{
    OpenGLDialog *ogld = new OpenGLDialog;
    ogld->showFullScreen();
    ogld->setFocus();
}