[gelöst] Events fangen

Alles rund um die Programmierung mit Qt
Antworten
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

[gelöst] Events fangen

Beitrag von PoetikBiker »

Hallo zusammen,
gibt es eine Möglichkeit einen MousePressEvent eines Childs in einem Dialog abzufangen, ohne das ich von dem Child ableiten muß?

Konkret muß ich mitbekommen wenn die rechte Maustaste in einem QTableWidget gedrückt wurde. Der Dialog, in dem dieses Widget liegt, muß darauf bestimmte Aktionen ausführen. Ich meine irgendwo mal gelesen zu haben, wie man das macht, aber ich weiß und finde es leider nicht mehr...

Danke und Gruß
Zuletzt geändert von PoetikBiker am 14. Mai 2012 10:01, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Events fangen

Beitrag von franzf »

Oftmals werden Events vom child an den parent weitergereicht, hier tut es das aber nicht, bei einem QLabel geht es z.B. schon.
Kleines Testprogramm (sowas ist immer interessant, um zu sehen, wie sich die Komponenten verhalten):

Code: Alles auswählen

#include <QWidget>
#include <QHBoxLayout>
#include <QDebug>
#include <QTableWidget>
#include <QMouseEvent>
#include <QApplication>
#include <QLabel>

class Window : public QWidget {
    void mousePressEvent(QMouseEvent* e) {
        qDebug() << "Mouse pressed at" << e->pos();
        qDebug() << table << label << childAt(e->pos());
    }
    
    QTableWidget* table;
    QLabel* label;
    
public:
    Window() {
        QHBoxLayout *l = new QHBoxLayout(this);
        table = new QTableWidget(10, 5, this);
        l->addWidget(table);
        
        label = new QLabel("Hallo", this);
        l->addWidget(label);
    }
};

int main(int argc, char** argv) {
    QApplication app(argc, argv);
    Window w;
    w.show();
    return app.exec();
}
Der sichere Weg geht über eventFilter. Das wichtigste dazu steht in der Doku: QObject -> eventFilter
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

Re: Events fangen

Beitrag von PoetikBiker »

Ich habe es gelöst:

der Trick ist ein Event-Filter zu installieren mittels QObject::installEventFilter()

manchmal sieht man den Wald vor läuter Bäumen nicht, insbesondere bei so großen Libraries wie Qt...
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Events fangen

Beitrag von franzf »

PoetikBiker hat geschrieben:der Trick ist ein Event-Filter zu installieren mittels QObject::installEventFilter()
Aber genau den hab ich doch erwähnt (vllt. ist der Satz unter dem dicken Code-Kasten unter gegangen ;))
Antworten