Seite 1 von 1

Slot wird mehrfach ausgeführt

Verfasst: 18. Oktober 2006 23:08
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

Verfasst: 19. Oktober 2006 06:53
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.

Verfasst: 24. Oktober 2006 07:29
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!

Re: Slot wird mehrfach ausgeführt

Verfasst: 24. Oktober 2006 11:23
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.

Re: Slot wird mehrfach ausgeführt

Verfasst: 24. Oktober 2006 16:22
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.

Verfasst: 25. Oktober 2006 06:46
von tommy_gun
hallo macman,

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

tommy

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

Verfasst: 25. Oktober 2006 22:05
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

Verfasst: 25. Oktober 2006 22:39
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

werds mir merken...

Verfasst: 27. Oktober 2006 06:47
von tommy_gun
hallo christian81,

werde versuchen mich in zukunft daran zu halten :-)

tommy