[solved] Zugriff auf Widgets in QGridLayout

Alles rund um die Programmierung mit Qt
Antworten
doc750
Beiträge: 16
Registriert: 28. Dezember 2006 09:39
Wohnort: Rosenheim

[solved] Zugriff auf Widgets in QGridLayout

Beitrag von doc750 »

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
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:

Beitrag von Christian81 »

Ohne zwischenspeichern (d.h. als Member der Klasse deklarieren wie es auch der Designer/uic macht) wird es wohl nichts werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

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
doc750
Beiträge: 16
Registriert: 28. Dezember 2006 09:39
Wohnort: Rosenheim

Beitrag von doc750 »

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...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

...ja mit childAt(). Evtl. sind deine Widgets noch nicht visible. Aber warum das ganze so umständlich?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
doc750
Beiträge: 16
Registriert: 28. Dezember 2006 09:39
Wohnort: Rosenheim

Beitrag von doc750 »

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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

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());
doc750
Beiträge: 16
Registriert: 28. Dezember 2006 09:39
Wohnort: Rosenheim

Beitrag von doc750 »

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
Antworten