ListWidget doubleClick-Ereignis

Alles rund um die Programmierung mit Qt
Antworten
oberschlingel
Beiträge: 85
Registriert: 11. April 2006 09:25
Wohnort: Berlin

ListWidget doubleClick-Ereignis

Beitrag von oberschlingel »

Hallo,

ich habe ein komisches Problem:
Das funktioniert: Wenn ich den QButton buttonExit drücke, wird ein neues Widget vom übergeordneten Widget über das Signal trainingClicked erzeugt (beinhaltet einen QPainter).
Das funktioniert nicht: Wenn ich einen Doppelklick auf das QListWidget listLesson ausführe, hängt sich das Programm auf. Dabei ruft doch die Methode (der Slot) doubleClickLesson nur die Methode (den Slot) clickTraining auf, die eigentlich funktioniert.

Zwei Slots:

Code: Alles auswählen

void StartWidget::clickTraining() {
	// User finished setting the properties and wants to start the
	// training lesson
	int selectedLesson;
	if ((selectedLesson = listLesson->currentRow()) == -1) {
		return;
	}
	// -> emit the signal that mainwindow knows user wants to start training
	emit trainingClicked(selectedLesson + 1);
}

void StartWidget::doubleClickLesson(QListWidgetItem *item) {
	clickTraining();
}
Zwei Verbindungen:

Code: Alles auswählen

connect(buttonTraining, SIGNAL(clicked()), this, SLOT(clickTraining()));
connect(listLesson, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(doubleClickLesson(QListWidgetItem*)));
Debugger-Fehlermeldung :

Code: Alles auswählen

ContinueDebugEvent (cpid=3884, ctid=2948, DBG_CONTINUE);
gdb: kernel event for pid=3884 tid=2948 code=OUTPUT_DEBUG_STRING_EVENT)
warning: QPainter::begin(), paintdevice returned engine == 0, type: 2

ContinueDebugEvent (cpid=3884, ctid=2948, DBG_CONTINUE);
gdb: kernel event for pid=3884 tid=2948 code=OUTPUT_DEBUG_STRING_EVENT)
warning: QPainter::end: Painter is not active, aborted

ContinueDebugEvent (cpid=3884, ctid=2948, DBG_CONTINUE);
gdb: kernel event for pid=3884 tid=2948 code=EXCEPTION_DEBUG_EVENT)
gdb: Target exception EXCEPTION_ACCESS_VIOLATION at 0x0056527d

Program received signal SIGSEGV, Segmentation fault.
0x0056527d in QAbstractItemView::mouseDoubleClickEvent (this=0x3948da0,
---Type <return> to continue, or q <return> to quit---
Weiß jemand Rat?

Danke vielmals!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Man kann nur in QWidget::paintEvent() (bzw. der überladenen Funktion paintEvent() in deiner Klasse) zeichnen. Dein Signal kann also nur ein update() ausführen und Du musste dann später zeichnen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
oberschlingel
Beiträge: 85
Registriert: 11. April 2006 09:25
Wohnort: Berlin

Beitrag von oberschlingel »

Habe folgendes festgestellt:
Wenn ich die Klasse (QWidget) StartWidget mit delete lösche, von einer Klasse aus, die das trainingClicked empfängt, hängt sich das Programm auf. Habe es jetzt anders, ohne delete, gelöst.

Aber warum der Fehler nur nach einem Doppelklick, nicht aber nach einem Buttonklick auftritt, obwohl genau die gleiche Methose aufgerufen wird, ist mir unerklärlich.
Antworten