Alles rund um die Programmierung mit Qt
Bolle
Beiträge: 14 Registriert: 11. Dezember 2006 16:22
Beitrag
von Bolle » 15. Dezember 2006 16:05
In einer GroupBox habe ich verschiedene Childwidgets.
Unter anderem ist dabei auch ein QTableWidget. Ich will nun einen EventFilter auf die verschiedenen Item in der Tabelle setzte.
Den Filter auf die Tabelle (lediglich den Rahmen) zu setzen klappt mit:
Ich möchte aber eben die Events auf den Items filtern.[/quote]
Zuletzt geändert von
Bolle am 15. Dezember 2006 17:06, insgesamt 1-mal geändert.
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 15. Dezember 2006 16:15
QTableWidgetItems haben keine Events und sind auch nicht von QObject abgeleitet, somit kannst du auch keinen Event-Filter draufsetzen.
Bolle
Beiträge: 14 Registriert: 11. Dezember 2006 16:22
Beitrag
von Bolle » 15. Dezember 2006 16:22
upsala hat geschrieben: QTableWidgetItems haben keine Events und sind auch nicht von QObject abgeleitet, somit kannst du auch keinen Event-Filter draufsetzen.
dann muss ich mit meiner Frage doch ein wenig weiter ausholen:
Ich habe eine Tabelle in der hinter jedem Eintrag ein Foto liegt. Wenn in der Tabelle ein Foto ausgewählt wird, soll es angezeigt werden. Da ich aber mit geklickter Maustaste und selektiertem Item die Tabelle 'traversieren' kann, möchte ich, dass in der Anzeige das Bild erst dann geladen wir, wenn ich die Taste wieder loslasse. Dazu wollte ich releaseButton abfangen, aber den gibts nun ja nicht. Hat jemande eine Idee wie ich das umgehen könnte?
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 15. Dezember 2006 16:25
QTableWidget hat ein void mouseReleaseEvent(QMouseEvent *event). Das kannst du überschreiben und deine Funktion realisieren.
Bolle
Beiträge: 14 Registriert: 11. Dezember 2006 16:22
Beitrag
von Bolle » 15. Dezember 2006 16:39
upsala hat geschrieben: QTableWidget hat ein void mouseReleaseEvent(QMouseEvent *event). Das kannst du überschreiben und deine Funktion realisieren.
Code: Alles auswählen
bool InfoWidget::eventFilter(QObject* target, QEvent* event)
{
if (target==_table){
if(event->type() == QEvent::MouseButtonPress){
std::cout << "event filter MouseButtonPress" << std::endl;
return true;
}
if(event->type() == QEvent::MouseButtonRelease){
std::cout << "event filter MouseButtonRelease" << std::endl;
return true;
}
}
return false;
}
ich dachte ich hätte dies bereits in meinem EventFilter abgefangen. Selstamerweise löst sich der Event aber nur dann aus, wenn ich exakt auf den Rahmen der Tabelle klicke. Überall sonst bleibt die Ausgabe stumm?!
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 15. Dezember 2006 16:55
Bist du dir sicher, daß die Events vom richtigen Widget abfängst?
Bolle
Beiträge: 14 Registriert: 11. Dezember 2006 16:22
Beitrag
von Bolle » 15. Dezember 2006 17:02
upsala hat geschrieben: Bist du dir sicher, daß die Events vom richtigen Widget abfängst?
ja, da bin ich mir ganz sicher
Bolle
Beiträge: 14 Registriert: 11. Dezember 2006 16:22
Beitrag
von Bolle » 15. Dezember 2006 17:08
Der EventFilter muss auf dem Viewport installiert werden!
Code: Alles auswählen
bool InfoWidget::eventFilter(QObject* target, QEvent* event)
{
if (target==_tableOfPlates->viewport()){
if(event->type() == QEvent::MouseButtonPress){
std::cout << "event filter MouseButtonPress" << std::endl;
_mousePressed=true;
return true;
}
if(event->type() == QEvent::MouseButtonRelease){
std::cout << "event filter MouseButtonRelease" << std::endl;
_mousePressed=false;
return true;
}
}
return false;
}
danke upsala für deine Mühen