[gelöst] Checkboxen in dynamischer Tabelle ansprechen

Alles rund um die Programmierung mit Qt
Antworten
DemonCleaner
Beiträge: 8
Registriert: 23. Januar 2008 11:18

[gelöst] Checkboxen in dynamischer Tabelle ansprechen

Beitrag 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?
Zuletzt geändert von DemonCleaner am 1. Februar 2008 09:02, insgesamt 3-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...
DemonCleaner
Beiträge: 8
Registriert: 23. Januar 2008 11:18

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

Beitrag von upsala »

Also bei mir heist die Funktion ja findChild, welche Qt-Version hast du, daß die Funktion jetzt checkbox heißen soll?
DemonCleaner
Beiträge: 8
Registriert: 23. Januar 2008 11:18

Beitrag 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.
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

wie wieder löschen?

Beitrag 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
Antworten