Seite 1 von 1

Zugriff von QDialog auf Elemente von QMainWindow

Verfasst: 2. Februar 2008 16:21
von jd
Hallo, ich öffne aus ein QMainWindow über das Menü ein QDialog. In dem QDialog geben ich einige Daten ein, die dann verarbeitet werden. Nach der Verarbeitung innerhalb des QDialoges möchte ich den Text von QLabel, weches sich in QMainWindow befindet ändern.

Wie bekomme ich Zugriff von dem QDialog auf Elemente von QMainWindow?

Ich habe mir gedacht das ich ein Pointer von meiner QMainWindow-Klasse an den QDialog übergeben muss, nur weiß ich nicht wie ich das machen muss.

Hat da jemand einen Tipp für mich?

so long
jd

Verfasst: 2. Februar 2008 16:25
von Christian81
Sorry, das ist keine Qt-Frage sondern basic c++.
Ich würde im Dialog eine getFoo() - Funktion einbauen die die gewünschten Daten zurückliefert.

Verfasst: 2. Februar 2008 18:28
von jd
Ok das habe ich gemacht, aber nicht in meinen Kopf geht, warum kann ich von außen nicht auf Public-Methoden zugreifen?

Code: Alles auswählen

class CDialogConnect : public QDialog, private Ui::DialogConnect {
	Q_OBJECT
	public:
		CDialogConnect();
		~CDialogConnect();
		QString getServerInfo();
}
So in meiner QMainWindow Klasse mach ich folgendes:

Code: Alles auswählen

void CMainWindow::openDialogConnect() {
	connectDialog = new CDialogConnect;
	do {
		connectDialog->show();
	} while (!connectDialog->Accepted);

	if (connectDialog->Accepted) {
		QString request = connectDialog->getServerInfo() );
	}
}
Ich bekomme die Meldung:
class QDialog’ has no member named ‘getServerInfo

Wieso class QDialog? ich habe doch ein Object von CDialogConnect, was lediglich von QDialog erbt.

Verfasst: 2. Februar 2008 18:46
von PeterLustig
Überprüf mal ob die Definition von "connectDialog" ebenfalls deine neue Dialog Klasse ist.

Verfasst: 2. Februar 2008 21:18
von jd
Problem gelöst:

Code: Alles auswählen

connectDialog = new CDialogConnect;
	QString requestInfo;

	if (connectDialog->exec() == CDialogConnect::Accepted) {
		QMessageBox::information(this, tr("FromMain"), connectDialog->getServerInfo());
	}
Peter dein Verdacht war richtig.

Danke euch allen