Seite 1 von 1

[gelöst] Findet Slot nicht

Verfasst: 27. Juni 2011 17:38
von huckleberry
Hallo Leute,

ich habe ein Gialogfenster gebaut, wo kurz einige Werte abgefragt werden.

Code: Alles auswählen

//....
	// Connect
	connect(btnOK,		SIGNAL(clicked(bool)),		this,		SLOT(this->getData(tPC)));
//....

void DlgADialog::getData(MyController &tMC)
{

//dothis	

	bool ok;
	
	tMC.addNewData(	tID.toInt(&ok, 10),
			tName,
			tCat.toInt(&ok, 10),
			tVal1.toInt(&ok, 10),
			tVal2.toInt(&ok, 10),
			0);
	this->hide();
}
und in der Header:

Code: Alles auswählen

public slots:
	void getData(MyController &tMC);

Verfasst: 27. Juni 2011 17:42
von Christian81
Und wie soll es funktionieren wenn die Signatur vom Signal und Slot nicht passen?
http://doc.qt.nokia.com/4.7/signalsandslots.html

Verfasst: 28. Juni 2011 08:51
von huckleberry
Christian81 hat geschrieben:...wenn die Signatur vom Signal und Slot nicht passen?
Ok, ich nehme an du meinst:

Code: Alles auswählen

connect(btnOK,      SIGNAL(clicked(bool)),      this,      SLOT(this->getData(tPC))); 
Mein Slot 'getData' erwartet ein 'MyController'-Objekt, welches mein Signal nicht senden wird? Danke für den Hinweis.

Ok, wie kann ich dann mein Problem elegant lösen?
Ich habe ein QHash wo ich verschiedene Werte drauf sichere. Ich wollte mit diesem Dialogfenster einige Werte abfragen (int, QString, int, int, int) und wenn ich dann Ok-Button drücke, sollten die Werte in den QLineEdits einfach in meine QHash gepusht werden.

Geplant war das mit der getData() Methode/Slot, wo ich mein QHash byReference übergebe und dort direkt erweitere.

Elegante Vorschläge sehr willkommen..

Vielen Dank. Gruß Huck

Verfasst: 28. Juni 2011 09:09
von upsala
Ungefähr so:

Code: Alles auswählen

Dlg dlg;
if (dlg.exec()==Accepted) {
  saveData=dlg.getData();
}

Verfasst: 28. Juni 2011 14:48
von huckleberry
upsala hat geschrieben:Ungefähr so:
Jupp Danke.

(Falls andere an gleichem Problem sitzen):
Damit "Accepted" erkannt nicht vergessen richtig zu connecten.

Code: Alles auswählen

connect(btnOK, SIGNAL(pressed()), this, SLOT(accept()));