On Wednesday 15 June 2005 15:29, Norbert Pilsl wrote:
In meinen MainWindow gibt es ein QTextEdit- Feld und eine Funktion die übergebene Argumente in dieses Feld schreibt. Das funktioniert auch.
So weit gut.
Ein Dialog der vom MainWindow gestartet wird soll auch in dieses TextFeld schreiben können.
Das ist ein Fehldesign. Dialoge sollten sich nicht gegenseitig direkt in Widgets schreiben. Wenn schon, dann spendiert man Methoden (Zugriffsfunktionen der beteiligten Objekte), um auf logischer (!) Ebene darauf zuzugreifen - in der Art "dia::setSonstwas()" und "dia::sonstwas()" (oder auch "dia::getSonstwas()", je nach persönlichen Vorlieben). Mit Qt könnte man auch den einen ein Signal versenden lassen, das man auf höherer Ebene mit einem Slot auf der anderen Seite verbindet - dann wären die Komponenten maximal entkoppelt.
Der Dialog "kennt" natürlich dieses TextFeld nicht. Deshalb habe ich mainwindow.h in den Header von dem Dialog geschrieben.
Klar, das musst du dann natürlich.
Nach meinen Kenntnisstand sollte es so funktionieren wenn die Funktion public ist.
Ja.
Natürlich funktioniert es nicht.
Da ist nix "natürlich" daran. ;-) Aber hast du denn auch für Zugriff auf die eine Instanz deines Hauptfensters gesorgt? Das kann man entweder über eine globale Variable oder (besser) über eine statische Klassenmethode - s.u.
In meinen Buch konnte ich keine weitere mögliche Fehlerquelle finden. Das Kapitel "Fortgeschrittene C++ Programmierung" habe ich noch nicht gelesen. Hier geht es aber mehr um Speicherverwaltung.
Das fällt auch nicht unter "fortgeschritten", sondern eher unter "Grundwissen Objektorientierung". Probier's mal, wie ich oben beschrieben habe: mainwindow.h: class MainWindow: public QMainWindow // oder so { ... public: MainWindow( ... ); // Konstruktor ... QString sonstwas() const; void setSonstwas( const QString & sonstwas ); ... static MainWindow * mainWindow(); // Zugriff auf die einzige Instanz private: ... QTextEdit * _sonstwas; static MainWindow * _mainWindow; ... }; mainwindow.cpp: MainWindow::_mainWindow = 0; MainWindow::MainWindow( ... ) : QMainWindow( ... ) { ... _mainWindow = this; } MainWindow::mainWindow() { return _mainWindow; } QString MainWindow::sonstwas() const { return _sonstwas->text(); } void MainWindow::setSonstwas( const QString & sonstwas ) { _sonstwas->setText( sonstwas ); } anderer_dialog.cpp: ... MainWindow::mainWindow()->setSonstwas( "wasweissich" ); ... (Siehe auch Buch "Design Patterns", Abschnitt "Singleton-Objekte") CU -- Stefan Hundhammer <sh@suse.de> Penguin by conviction. YaST2 Development SUSE Linux Products GmbH Nuernberg, Germany