Zugriff auf Inhalt von ComobBox innerh. eines QTableWidgets?

Alles rund um die Programmierung mit Qt
Antworten
pfotenpo
Beiträge: 33
Registriert: 17. Februar 2008 15:07

Zugriff auf Inhalt von ComobBox innerh. eines QTableWidgets?

Beitrag von pfotenpo »

Hey,

ich habe also ein QTableWidget angelegt und in einige der Zellen einen QComboBox eingefügt

Code: Alles auswählen

setCellWidget(1,2,newComboBox);
wie kann ich denn nun den Inhalt dieser ComboBox auslesen??? ich komm irgendwie nicht mehr an die QComboBox heran. Es scheint dafür keine Methoden zu geben in der Klasse QTableWidget. Ich kann mir nur mit cellWidget() einen Pointer auf ein QWidget Objekt zurückgeben lassen, aber mehr auch nicht.

Das muss doch irgendwie gehen??!?!?
Vielen Dank für die Hilfe.
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Re: Zugriff auf Inhalt von ComobBox innerh. eines QTableWidg

Beitrag von gerome69 »

Dann caste doch den Pointer, wenn du sicher weißt, welchen Typ das QWidget hat, etwa so:

Code: Alles auswählen

QComboBox *myBox=(QComboBox*)myTableView->cellWidget(r, c);
Gérôme
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

old-style casts sind böse :wink:
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Soll die QComboBox dauerhaft enthalten sein? Wenn nein -> Delegate verwenden.

Und zum casten static_cast, dynamic_cast oder qobject_cast verwenden...
pfotenpo
Beiträge: 33
Registriert: 17. Februar 2008 15:07

Beitrag von pfotenpo »

das mit dem casten ist keine schlechte Idee...gibts da irgendwo eine Seite wo man was zu static_cast, dynamic_cast oder qobject_cast lesen kann??

Dennoch befürchte ich das mein Problem damit noch nicht ganz gelöst ist, da es in der Tablle nicht nur ComboBoxen gibt, sondern auch hin und wieder mal eine SpinBox. Leider kann ich vorher noch nicht sagen, an welcher Stelle eine ComboBox sitzt und an welcher Stelle eine SpinBox sitzt (weil die Tabelle variabel angelegt werden soll, und jedesmal ein klein wenig anders aussieht).


Kann ich denn irgendwie testen ob der zurückgelieferte QWidget-Pointer (bei cellWidget(r,c)) auf eine ComboBox oder eine SpinBox verweist??
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

Servus,
pfotenpo hat geschrieben:das mit dem casten ist keine schlechte Idee...gibts da irgendwo eine Seite wo man was zu static_cast, dynamic_cast oder qobject_cast lesen kann??
Ein Beispiel:

Code: Alles auswählen

QComboBox *cbx = qobject_cast<QComboBox*>(myTableView->cellWidget(r, c));
oder

Code: Alles auswählen

QWidget *widget = qobject_cast<QWidget*>(myTableView->cellWidget(r, c));
Wenn du ein internen Namen vergibst, damit meine ich setObjectName( "spinBox" ), kannst du die 2 Variante verwenden, da cellWidget ein QWidget zurück gibt.

Code: Alles auswählen

if( widget->objectName() == "spinBox" )
{
   // usw. usf.
}
Um es weiter zu verfeinern kann man noch QObject::metaObject benutzen.
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
pfotenpo
Beiträge: 33
Registriert: 17. Februar 2008 15:07

Beitrag von pfotenpo »

super!

ich habe das jetzt erledigt mit:
Beim Anlegen der ComboBox und Einfügen in die Tabelle

Code: Alles auswählen

QComboBox* newComboBox = new QComboBox;
newComboBox->setObjectName("newComboBox");
myTableWidget->setCellWidget(r, c, newComboBox);
und beim Auslesen der Tabelle frag ich dann ab und mache einen qobject_cast

Code: Alles auswählen

if ((myTableWidget->cellWidget(r,c))->objectName()=="newComboBox")
{
QComboBox *cbx = object_cast<QComboBox*>(myTableWidget->cellWidget(r,c));
QString s = cbx->itemText(cbx->currentIndex());
}
DANKE!
Antworten