Seite 1 von 1

[gelöst] Checkboxen in dynamischer Tabelle ansprechen

Verfasst: 30. Januar 2008 16:48
von DemonCleaner
Hallo,

ich baue mir etwas so eine Tabelle auf (stark vereinfacht):

Code: Alles auswählen

	int i
	for (i = 0; i < 5; i++) {
		if (table->rowCount() < (i+1)) table->setRowCount(i+1);
		QCheckBox *box = new QCheckBox(table);
		table->setCellWidget(i, 0, box);
		string = "checkbox";
		string.append(QString::number(i));
		box->setObjectName(string);
	}
Da die Anzahl der Reihen/Checkboxen aber im eigentlichen Programm erst beim Programmaufruf festgelegt wird, kann ich die einzelnen Checkboxen nicht schon vorher deklarieren.
Wenn ich jetzt versuche, sie in einer Methode über den Objektnamen aufzurufen, hält er diesen für eine undeklarierte Variable.

Viel lukrativer erschien mir dann die Möglichkeit, die Checkboxen über "cellWidget" anzusprechen; etwa so:

Code: Alles auswählen

 void Widget::mySet() {
	for (int a = 0; a < i; a++) {
		table->cellWidget(a, 0)->setCheckState(Qt::Checked);
	}
} 
Hätte da vielleicht jemand einen Tip, wie ich den CheckState der Boxen abfragen oder setzen kann?

Verfasst: 30. Januar 2008 16:53
von upsala
Wenn ich jetzt versuche, sie in einer Methode über den Objektnamen aufzurufen, hält er diesen für eine undeklarierte Variable.
Diesen Aufruf würde ich gerne mal sehen.

Die andere Möglichkeit: Pack dein CheckBoxen alle in eine QList...

Verfasst: 30. Januar 2008 17:08
von DemonCleaner
Ich weise den Checkboxen die Namen "checkbox[0]" bis "checkbox" zu und versuche dann unten in der Funktion sie mit den Namen anzusprechen.

Allerdings komm ich nicht übers Kompilieren hinaus, da bringt er die meldungen "'checkbox' was not declared in this scope" und "unused variable 'checkbox'"

Verfasst: 30. Januar 2008 17:52
von upsala
Also bei mir heist die Funktion ja findChild, welche Qt-Version hast du, daß die Funktion jetzt checkbox heißen soll?

Verfasst: 31. Januar 2008 14:38
von DemonCleaner
Danke für den Tipp mit der QList, klappt damit super.

Sieht dann ungefähr so aus:

Code: Alles auswählen

	for (i = 0; i < 5; i++) {
		table->setRowCount(i+1);
		QCheckBox *box = new QCheckBox(table);
		allboxes.append(box);
		table->setCellWidget(i, 0, allboxes.at(i));
	}
mit der Funktion:

Code: Alles auswählen

void Widget::mySet() {
	for (int a = 0; a < allboxes.size(); a++) {
		allboxes.at(a)->setCheckState(Qt::Checked);
	} 
}
edit: wobei allboxes als QList<QCheckBox*> deklariert wird.

wie wieder löschen?

Verfasst: 23. September 2008 06:02
von speedy
Hi

so hab ich das auch bei mir.

Nun soll mein Programm die Checkboxen alle löschen und neu aufbauen (anders aufbauen).
hab das jetzt so
CheckboxList.last()->deleteLater();
CheckboxList.takeLast();
es scheint zu funktionieren aber gibt das auch wirklich den Speicher frei?
Hab ich damit kein Speicherlag?

mfg speedy