Seite 1 von 1
Zugriff auf Inhalt von ComobBox innerh. eines QTableWidgets?
Verfasst: 25. Februar 2008 11:26
von pfotenpo
Hey,
ich habe also ein QTableWidget angelegt und in einige der Zellen einen QComboBox eingefügt
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.
Re: Zugriff auf Inhalt von ComobBox innerh. eines QTableWidg
Verfasst: 25. Februar 2008 11:52
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
Verfasst: 25. Februar 2008 12:10
von dhcase
old-style casts sind böse

Verfasst: 25. Februar 2008 12:20
von upsala
Soll die QComboBox dauerhaft enthalten sein? Wenn nein -> Delegate verwenden.
Und zum casten static_cast, dynamic_cast oder qobject_cast verwenden...
Verfasst: 25. Februar 2008 14:03
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??
Verfasst: 25. Februar 2008 14:32
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.
Verfasst: 25. Februar 2008 17:34
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!