Seite 1 von 1
[gelöst] Events fangen
Verfasst: 10. Mai 2012 14:16
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ß
Re: Events fangen
Verfasst: 10. Mai 2012 14:58
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
Re: Events fangen
Verfasst: 14. Mai 2012 10:01
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...
Re: Events fangen
Verfasst: 14. Mai 2012 10:24
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

)