Seite 1 von 1

Auf QWidget in GridBox zugreifen

Verfasst: 29. August 2009 01:22
von Okeanos
Hallo,

ich habe zahlreiche comboBoxes in einem GridLayout angeordnet und versuche jetzt auf einzelne Elemente abhängig von Spalte und Zeile zuzugreifen. Allerdings stoße ich dabei auf Probleme.

Folgendes Beispiel soll mein Problem verdeutlichen:

Code: Alles auswählen

#include <QApplication>
#include <QGridLayout>
#include <QComboBox>

int main(int argc, char** argv){
	QApplication app(argc, argv);
	QWidget *win = new QWidget;
	QGridLayout *layout = new QGridLayout(win);

	for (int i = 0; i < 10; i++){
		QComboBox *mybox = new QComboBox;
		mybox->addItem("Test");
		mybox->addItem("Test2");

		layout->addWidget(mybox, i / 2, i % 2);
	}

	layout->itemAtPosition( 0, 0 )->widget()->findChild<QComboBox *>()->setCurrentIndex(1);

	win->show();
	return app.exec();
}
Es will mir einfach nicht gelingen, den INdex einer comboBox in zu verändern, wenn ich Spalte und Zeile direkt angebe. Offensichtlich wird ein Null-Pointer zurückgegeben, aber ich weiß einfach nicht, was ich falsch mache. Kann mir jemand helfen?

Verfasst: 29. August 2009 22:10
von Xairo

Code: Alles auswählen

    QComboBox* c = qobject_cast<QComboBox*>(layout->itemAtPosition(0, 0)->widget());
    c->setCurrentIndex(1);
statt

Code: Alles auswählen

layout->itemAtPosition(0, 0)->widget()->findChild<QComboBox *>()->setCurrentIndex(1); 
Hier wird im QComboBox nach weiteren Kindern gesucht. Was wohl nicht gewünscht ist.

Dann klappt es bei mir.

Verfasst: 2. September 2009 20:28
von Okeanos
Vielen Dank für die Hilfe, das war genau, was ich gesucht habe.