Slot wird mehrfach ausgeführt

Alles rund um die Programmierung mit Qt
Antworten
tommy_gun
Beiträge: 59
Registriert: 9. August 2005 16:51

Slot wird mehrfach ausgeführt

Beitrag von tommy_gun »

hallo

habe mir ein kleines programm geschrieben, dass daten aus einer datei liest. dazu habe ich einen tool button um den pfad zur datei zu wählen. mit dem signal des tool buttons wird im zugehörigen slot der file dialog ausgeführt um das verzeichnis mit der daten-datei auszuwählen. ist das verzeichnis ausgewählt, kann das auslesen der daten mit einem push button gestartet werden.

hier nun mein problem, die oben beschriebenen slots werden offenbar mehrfach ausgeführt. wird im file dialog nach dem auswählen des verzeichnisses ok gedrückt, erscheint der file dialog noch einmal. wird der push button zum auslesen der daten gedrückt, wird der zugehörige slot viermal nacheinander ausgeführt. habe das bemerkt, weil ich die ausgelesenen daten in ein listwidget schreibe, und sie dort vier mal eingetragen werden.

woran kann das liegen?

die signale habe ich wiefolgt mit den slots verbunden.

Code: Alles auswählen

connect(tbProjPath, SIGNAL(clicked()), this, SLOT(on_tbProjPath_clicked()));
	
connect(pbScanProj, SIGNAL(clicked()), this, SLOT(on_pbScanProj_clicked()));
Mein Headerfile siet so aus:

Code: Alles auswählen

#ifndef CREATECHECKLIST_H_
#define CREATECHECKLIST_H_
#include <QDialog>

#include "ui_CreateChecklist.h"

class CreateChecklist : public QDialog,  private Ui::CreateChecklist {

Q_OBJECT

public:
	CreateChecklist(QWidget *parent = 0);

private slots:
	void on_tbProjPath_clicked(void);
	void on_pbCreateFile_clicked(void);
	void on_pbScanProj_clicked(void);

};

#endif /*CREATECHECKLIST_H_*/
danke für die hilfe.

tommy
Vaaco
Beiträge: 21
Registriert: 12. Oktober 2006 11:51

Beitrag von Vaaco »

Hi,

für einen ToolButton solltest du das Signal triggered() verwenden, ansonsten wird beim press und release der Maustaste ein Signal ausgelöst.
Daher vermutlich die zwei file Dialoge.
tommy_gun
Beiträge: 59
Registriert: 9. August 2005 16:51

Beitrag von tommy_gun »

guten morgen vaaco

habe den tool button nun durch einen push button ersetzt, das resultat bleibt das selbe. der file open dialog wird immer noch zweimal geöffnet. es sieht so aus, dass wenn man den ok button des file open dialogs drückt wird der slot noch einmal ausgeführt.

hier die implementation des slots:

Code: Alles auswählen

void CreateChecklist::on_pbProjPath_clicked(void) {
	QString sScratch01;
	// set the current directory
	sScratch01 = leProjPath->text();
	// get the project directory
	sScratch01 = QFileDialog::getExistingDirectory(this, tr("Choose a project directory"), sScratch01, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
	// set the line edit text to the new path 
	leProjPath->setText(sScratch01);
}
mache ich hier was falsch?

tommy

/edited by Christian81: Bitte benutzt die

Code: Alles auswählen

 - Tags!
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Slot wird mehrfach ausgeführt

Beitrag von macman »

tommy_gun hat geschrieben:connect(tbProjPath, SIGNAL(clicked()), this, SLOT(on_tbProjPath_clicked()));
connect(pbScanProj, SIGNAL(clicked()), this, SLOT(on_pbScanProj_clicked()));
private slots:
void on_tbProjPath_clicked(void);
void on_pbCreateFile_clicked(void);
void on_pbScanProj_clicked(void);
Schonmal was von Autoconnect gehört? So wie Du deine Slots benannt hast, erstellt Qt die Connection für Dich. Wenn Du es dann auch noch selbst machst, hast Du 2 Connections für die Signale, weshalb deine Slots zweimal aufgerufen werden.
Sym
Beiträge: 139
Registriert: 15. Mai 2006 15:38
Wohnort: Bremen

Re: Slot wird mehrfach ausgeführt

Beitrag von Sym »

macman hat geschrieben:
tommy_gun hat geschrieben:connect(tbProjPath, SIGNAL(clicked()), this, SLOT(on_tbProjPath_clicked()));
connect(pbScanProj, SIGNAL(clicked()), this, SLOT(on_pbScanProj_clicked()));
private slots:
void on_tbProjPath_clicked(void);
void on_pbCreateFile_clicked(void);
void on_pbScanProj_clicked(void);
Schonmal was von Autoconnect gehört? So wie Du deine Slots benannt hast, erstellt Qt die Connection für Dich. Wenn Du es dann auch noch selbst machst, hast Du 2 Connections für die Signale, weshalb deine Slots zweimal aufgerufen werden.
Cool, das kann ich auch noch nicht.
tommy_gun
Beiträge: 59
Registriert: 9. August 2005 16:51

Beitrag von tommy_gun »

hallo macman,

nein, habe ich bis gestern nicht von gehört :-). danke für den tipp, war genau dieses problem.

tommy
tommy_gun
Beiträge: 59
Registriert: 9. August 2005 16:51

/edited by Christian81: Bitte benutzt die [code] - Tags!

Beitrag von tommy_gun »

hallo christian,

sorry die dumme frage, aber was meinst du damit?

/edited by Christian81: Bitte benutzt die

Code: Alles auswählen

 - Tags!

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

Beitrag von Christian81 »

Dann schau Dir jetzt nochmal deinen ersten Beitrag an und lies Dir das mal durch: http://qtforum.de/forum/faq.php?mode=bbcode
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
tommy_gun
Beiträge: 59
Registriert: 9. August 2005 16:51

werds mir merken...

Beitrag von tommy_gun »

hallo christian81,

werde versuchen mich in zukunft daran zu halten :-)

tommy
Antworten