Hi,
ich habe einem QGridLayout mehrere Widgets hinzugefügt, welche ich nun an anderer Stelle im Code bearbeiten möchte. Hierzu benötige ich den Zugriff auf diese Widgets.
Auszüge aus dem Code:
m_id3View = new QWidget; // m_id3View member von MainWindow
...
QGridLayout *id3Layout = new QGridLayout;
QLineEdit *titleEdit = new QLineEdit();
id3Layout->addWidget(titleEdit,0,0);
...
m_id3View->setLayout(id3Layout);
...
Wie komme ich nun an andere Stelle in der Klasse MainWindow wieder an meine Widgets um z.B. den Text für das Widget titleEdit zu setzen?
Alles was ich habe ist der Zeiger m_id3View.
Ich möchte die Zeiger auf die Widgets nicht "zwischenspeichern".
Ich habe nun schon mehrmals die Hilfe durchsucht, verschiedene Dinge ausprobiert, im Forum gesucht und Mr. Google befragt. Ich komm nicht drauf.
Kann mir jemand einen Tipp geben?
Gruß Uwe
[solved] Zugriff auf Widgets in QGridLayout
[solved] Zugriff auf Widgets in QGridLayout
Zuletzt geändert von doc750 am 4. Januar 2007 11:24, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Einfach ist es nicht, aber versuch es über folgende Funktionen:
Code: Alles auswählen
QRect QGridLayout::cellRect ( int row, int column ) const
QWidget *QWidget::childAt ( int x, int y ) const
QWidget *QWidget::childAt ( int x, int y ) const
hatte ich schon ausprobiert. childAt() liefert mir in meinem Fall ein NULL Pointer. Ich nehme daher an, dass die Widgets - welche mit addWidget dem Layout hinzugefügt wurden - nicht autom. Childwidgets sind.
QRect QGridLayout::cellRect ( int row, int column ) const
Hier fehlt mir der weitere Link, zwischen "ich habe die Koordinaten des Widgets" zu "ich habe den >Zeiger< auf das Widget". Habe in der Hilfe von QGridLayout nichts gefunden.
Komisch ist das ganze schon, dass wenn ich einem Objekt explizit etwas hinzufüge, ich hinterher keine einfache Möglichkeit habe, das hinzugefügte wieder auszulesen. Irgendwie muss doch das "Hinzufügen" einen Grund haben, d.h. das Objekt muss doch was mit den Widgets anstellen. Hierzu muss es doch intern die Referenzen auf die Widgets haben um z.B. bei einem vegrössern des Fensters die Widgets zeichnen zu können. An genau diese Liste sollte man herankommen können...
hatte ich schon ausprobiert. childAt() liefert mir in meinem Fall ein NULL Pointer. Ich nehme daher an, dass die Widgets - welche mit addWidget dem Layout hinzugefügt wurden - nicht autom. Childwidgets sind.
QRect QGridLayout::cellRect ( int row, int column ) const
Hier fehlt mir der weitere Link, zwischen "ich habe die Koordinaten des Widgets" zu "ich habe den >Zeiger< auf das Widget". Habe in der Hilfe von QGridLayout nichts gefunden.
Komisch ist das ganze schon, dass wenn ich einem Objekt explizit etwas hinzufüge, ich hinterher keine einfache Möglichkeit habe, das hinzugefügte wieder auszulesen. Irgendwie muss doch das "Hinzufügen" einen Grund haben, d.h. das Objekt muss doch was mit den Widgets anstellen. Hierzu muss es doch intern die Referenzen auf die Widgets haben um z.B. bei einem vegrössern des Fensters die Widgets zeichnen zu können. An genau diese Liste sollte man herankommen können...
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Hallo Christian,
die Widgets sind sichtbar und funktionieren auch, d.h. man kann Text eingeben.
Warum so umständlich? Naja, man möchte ja eine gewisse "Eleganz/Übersicht" in seinem Code haben, d.h. es macht für mich schon einen Unterschied, ob ich über eine zentrale Referenz alle Infos bekomme, oder ob ich nach der Holzhammermethode einfach alles was ich brauche, als member definiere.
Da ich insgesamt 12 Widgets habe, die ich dem Layout hinzufüge, werde ich mir wohl doch ein Array als member machen müssen. Schliesslich will man auch nicht in "vollkommener Eleganz" zugrunde gehen
Gruß Uwe
die Widgets sind sichtbar und funktionieren auch, d.h. man kann Text eingeben.
Warum so umständlich? Naja, man möchte ja eine gewisse "Eleganz/Übersicht" in seinem Code haben, d.h. es macht für mich schon einen Unterschied, ob ich über eine zentrale Referenz alle Infos bekomme, oder ob ich nach der Holzhammermethode einfach alles was ich brauche, als member definiere.
Da ich insgesamt 12 Widgets habe, die ich dem Layout hinzufüge, werde ich mir wohl doch ein Array als member machen müssen. Schliesslich will man auch nicht in "vollkommener Eleganz" zugrunde gehen
Gruß Uwe
Also den Pointer auf das Parent-Widget mußt du schon zwischenspeichern.
Code: Alles auswählen
QWidget *wdg=parent->itemAt((layout->cellRect(row, column)).center());
Hallo upsala,
den Pointer auf das Parent-Widget habe ich ja mit m_id3View.
Dein letzter Hinweis hat die Lösung gebracht. Mit diesem Zugriff ist es möglich, ausgehend von einem Pointer auf das Parent-Widget - unter Angabe der Grid-Koordinate das gewünschte Widget zu bekommen und darauf zuzugreifen.
Vielen Dank für deine Hilfe.
Gruß Uwe
den Pointer auf das Parent-Widget habe ich ja mit m_id3View.
Dein letzter Hinweis hat die Lösung gebracht. Mit diesem Zugriff ist es möglich, ausgehend von einem Pointer auf das Parent-Widget - unter Angabe der Grid-Koordinate das gewünschte Widget zu bekommen und darauf zuzugreifen.
Vielen Dank für deine Hilfe.
Gruß Uwe