Seite 1 von 1

Pointer zum MainWindow oder QApplication?

Verfasst: 9. Mai 2007 11:23
von C_R
Hallo,

ich bräuchte Informationen von einer Klasse mehrere Hierarchiebenen über der Klasse, die diese Daten benötigt. Gibt es einen globalen Pointer auf MainWindow oder QApplication->MainWindow oder so etwas?

Verfasst: 9. Mai 2007 11:42
von Christian81

Verfasst: 9. Mai 2007 13:09
von C_R
Hm ja,

Code: Alles auswählen

QString globalSettingsFile = qobject_cast<TabWidget*>(qobject_cast<MainWindow*>(QApplication::allWidgets()[0])->rightPane)->getXmlPath();
Bringt aber nen segmenation fault. Macht man das anders? Ist ja kein Beispiel angegeben.

Verfasst: 9. Mai 2007 13:50
von Christian81
Da sind so viele casts die schief gehen könnten und Du wunderst Dich dass es nicht geht? :)
Mach mal alles einzeln und testen auf != 0 dann siehst du wesentlich leichter wo der Fehler ist.

Verfasst: 9. Mai 2007 14:41
von C_R
nagut das MainWindow war nich list[0] sondern list[23]. Kann man einem Widget ne ID übergeben? Bzw. siehst du eine andere Möglichkeit, das widget genau zu bestimmen, abgesehen vom windowTitle?

Verfasst: 9. Mai 2007 14:48
von Christian81

Verfasst: 9. Mai 2007 15:18
von C_R
Danke, funktioniert allerdings nicht. Zumindest nicht so, wie ich es vorhab:

Code: Alles auswählen

QMainWindow *mainwin = QApplication::instance()->findChild<QMainWindow *>("mainWin");
Endet in einem segmentation fault. objectname ist gesetzt.

Verfasst: 9. Mai 2007 15:23
von C_R
QApplication scheint auch kein QObject zu sein.

edit:
ich machs nun doch über allWidgets() (und objectName anstelle des WindowTitles)

Verfasst: 9. Mai 2007 15:29
von Christian81
C_R hat geschrieben:QApplication scheint auch kein QObject zu sein.
Ich glaube Du solltest erst überlegen bevor Du was schreibst...

Verfasst: 9. Mai 2007 15:38
von C_R
Sorry, ich weiss, dass QApplication nen QObject ist. Ich wollte damit sagen, dass der Compiler bei mir meint, dass appendChild() "not an aggregate member of QCoreApplication" ist. Hab mich schlecht ausgedrückt, bezog sich auf den Post davor.

Verfasst: 9. Mai 2007 15:43
von Christian81
Benutzt Du msvc6 oder warum nimmst du nicht findChildren ?

Code: Alles auswählen

qApp->findChildren<QMainWindow *>()
Falls Du dein MeinWindow "mainWin" genannt hast geht natürlich auch

Code: Alles auswählen

qApp->findChildren<QMainWindow *>("mainWin")

Verfasst: 9. Mai 2007 15:53
von C_R
g++

Aber ja, findChildren wäre wohl die bessere wahl, danke.
Das Problem scheint ja bei mir dein qApp zu sein.

Code: Alles auswählen

QApplication::instance()->findChildren<QMainWindow *>().size()
liefert ebenfalls 0, mit "mainWin" (ja das is der Name) genauso.

Verfasst: 9. Mai 2007 15:59
von Christian81
Wir es evtl. noch nicht angezeigt bzw. ist es noch nicht erstellt worden?
Schau mal was qApp->findChildren<QWidget *>().size() liefert.

Verfasst: 9. Mai 2007 16:10
von C_R
hm auch Null.

Liegts doch am QApplication::instance() ??

Denn über QApplication::allWidgets() komm ich ja an das Widget in der gleichen Methode. Die Methode wird erst beim speichern aufgerufen, von daher sind die Widgets schon da.