[gelöst]QTableWidget erzeugt permanent Events

Alles rund um die Programmierung mit Qt
Antworten
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

[gelöst]QTableWidget erzeugt permanent Events

Beitrag von qtNiko »

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:

Code: Alles auswählen

...
uidg.tableW_logtype->installEventFilter(this);
...
Mein eventFilter habe ich mit printf's versehen, um die Verzweigungen zu erkennen, und sieht folgendermaßen aus:

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 == ...
             ...
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.
Zuletzt geändert von qtNiko am 17. Februar 2015 00:15, insgesamt 1-mal geändert.
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QTableWidget erzeugt permanent Events

Beitrag von Christian81 »

Gib doch den Eventtyp aus dann siehst Du es. Ich schätze Paint und Focus-Events.
Key Events würde ich eher mittels QAbstractItemView::keyPress/ReleaseEveent() abfangen. Mouseklicks über die entsprechenden Signale.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten