[gelöst]QTableWidget erzeugt permanent Events
Verfasst: 16. Februar 2015 00:57
hi,
hier mein nächstes Problem:
Meine Applikation erzeugt ein GUI-Objekt vom Typ Dialog_graph, das von QDialog abgeleitet ist, und graph heisst.
Die Klasse Dialog_graph enthält u.a. ein QTableWidget, tableW_logtype.
Nun möchte ich einige Tastenklicks und Mouseklicks von QTableWidget abfangen und entsprechend bearbeiten.
Im Constructor von Dialog_graph wird das Eventfilter installiert:
Mein eventFilter habe ich mit printf's versehen, um die Verzweigungen zu erkennen, und sieht folgendermaßen aus:
Sobald das Hauptfenster, in dessen Constructor das Objekt graph (Dialog_graph) erzeugt wird, geöffnet wird, erscheinen auf der Konsole in schneller Abfolge die printf's "event from tableW_logtype\n", ohne dass ich irgend eine Taste oder die Mouse berühre.
Woher kommen diese vielen, unaufhörlichen Events?
gelöst: die Qt-Umgebung arbeitet mit diversen Events, die zur Darstellung, etc. nötig sind. Mein Eventfilter enthielt nach dem jeweiligen printf ein "return true", was bedeutet, dass der Event nicht weitergereicht wird zur Bearbeitung. Für die korrekte Darstellung, etc. müssen jedoch die Events weitergereicht werden, was mit "return false" ermöglicht wird.
hier mein nächstes Problem:
Meine Applikation erzeugt ein GUI-Objekt vom Typ Dialog_graph, das von QDialog abgeleitet ist, und graph heisst.
Die Klasse Dialog_graph enthält u.a. ein QTableWidget, tableW_logtype.
Nun möchte ich einige Tastenklicks und Mouseklicks von QTableWidget abfangen und entsprechend bearbeiten.
Im Constructor von Dialog_graph wird das Eventfilter installiert:
Code: Alles auswählen
...
uidg.tableW_logtype->installEventFilter(this);
...Code: Alles auswählen
bool Dialog_graph::eventFilter(QObject *obj, QEvent *event) {
if (event->type() == QEvent::KeyPress) { // alle Tasten abfangen
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_Left) {
if (act_didx > 0)
move_act_didx(act_didx-1);
printf("event Key_Left\n");
return true; // keine weitere Bearbeitung mehr
}
else if (keyEvent->key() == Qt::Key_Right) {
if (act_didx < anz_gdat-1)
move_act_didx(act_didx+1);
printf("event Key_Right\n");
return true; // keine weitere Bearbeitung mehr
}
else {
printf("any Key\n");
return false;
}
}
else if (obj == uidg.tableW_logtype) {
printf("event from tableW_logtype\n");
return true;
} // if (obj == uidg.tableW_logtype)
else if (obj == ...
...
Woher kommen diese vielen, unaufhörlichen Events?
gelöst: die Qt-Umgebung arbeitet mit diversen Events, die zur Darstellung, etc. nötig sind. Mein Eventfilter enthielt nach dem jeweiligen printf ein "return true", was bedeutet, dass der Event nicht weitergereicht wird zur Bearbeitung. Für die korrekte Darstellung, etc. müssen jedoch die Events weitergereicht werden, was mit "return false" ermöglicht wird.