Qt static_cast<QKeyEvent *>



  • Hallo,

    lange ist es her, dass ich auf eure Hilfe hier angewiesen war 😉 Aber zur Zeit arbeite ich mich neu in C++ (war viel mit Java unterwegs) und insbesondere ins Qt-Framework ein. Dabei habe ich folgenden Code für einen eventFilter:

    bool MainWindow::eventFilter( QObject *object, QEvent *event) {
    
        if (object == ui->newItem && event->type() == QEvent::KeyPress) {
            QKeyEvent *ke = static_cast<QKeyEvent *>(event);
            if (ke->key() == Qt::Key_Enter) {
                addItem();
                return true;
            }
        }
        return false;
    }
    

    Das Problem ist, dass der Qt-Creator mir lediglich sagt:

    /home/mati/Programmierung/Qt/test/Tutorial-build-desktop/../Tutorial/mainwindow.cpp👎 In Elementfunktion »virtual bool MainWindow::eventFilter(QObject*, QEvent*)«:

    Aber der static_cast ist ja soweit richtig (und aus der offiziellen Qt Doku übernommen). Wenn ich den Cast und die innere if-Abfrage entferne kompiliert das ohne Probleme. Weiß jemand woran das liegt, was ich falsch mache oder was ich übersehe?

    Vielen Dank schonmal!

    Achja, das ganze läuft auf Ubuntu oneiric 64 bit, aber das sollte hier ja keine Rolle spielen.

    Gruß,
    NoUse666



  • NoUse666 schrieb:

    Das Problem ist, dass der Qt-Creator mir lediglich sagt:

    /home/mati/Programmierung/Qt/test/Tutorial-build-desktop/../Tutorial/mainwindow.cpp👎 In Elementfunktion »virtual bool MainWindow::eventFilter(QObject*, QEvent*)«:

    Tjoa, das sagt ja erstmal nur *wo*.
    Interessant wäre das *was*, welches vermutlich unmittelbar nach dieser Zeile im Build-Log zu finden ist.



  • Das wäre wirklich interessant, allerdings kommt danach nur ein error:

    👎 Fehler:[mainwindow.o] Fehler 1 Datei nicht gefunden

    Wie gesagt kompiliert das ganze wenn ich das static_cast auskommentiere. In der Header-Datei habe ich das ganze wie folgt:

    protected:
    bool eventFilter( QObject *object, QEvent *event );
    

    Da meine Klasse von QMainWindow erbt, und QKeyEvent von QInputEvent, das von QEvent erbt sollte der cast doch eigentlich keine Probleme machen... Ich bin da echt ratlos...



  • Zunächst mal solltest du das Buildlog genauer prüfen. Ich bin ziemlich sicher, dass der gcc das *was* eine Zeile vor dem *wo* ausgibt.

    Ansonsten wäre der einzige Grund der mir einfällt, dass das nicht funktionieren könnte, dass die Headerdatei, welche QKeyEvent enthält, nicht includiert ist.



  • oh man, um die Uhrzeit sollte man wohl doch besser schlafen.

    @LordJaxom: ja, habe vergessen die QtGui zu includen, jetzt läuft das prima. Danke!


Anmelden zum Antworten