Seite 1 von 1

[solved] QTableWidget => items werden nicht hinzugefügt

Verfasst: 4. August 2007 23:41
von Dawn
Hallo zusammen!
Ich hänge seit einiger Zeit an einem Problem fest.
Ich habe ein QTableWidget in das ich neue Zeilen einfüge.
Dabei handelt es sich um jeweils 4 Spalten, von der einer mit einer QProgressBar belegt wird. Soweit so gut.
Wenn ich zwei Zeilen einfüge funktioniert alles wunderbar, aber nach der 3. Zeile wird nurnoch die erste Spalte in der neuen Zeilen eingefügt und die restlichen 3 Spalten bleiben leer.

Dieser Code ist für das einfügen der Zeile verantwortlich

Code: Alles auswählen

void MainWidget::addItem(Todo* todo)
{
	if(!todo)
		return;

	int row = Table->rowCount();
	Table->insertRow(row);

	QProgressBar* bar = new QProgressBar();
	bar->setRange(0,100);
	bar->setValue(todo->Progress);

	QString stat;
	switch(todo->Status)
	{
	case 1:
		stat = "In progress";
		break;

	case 2:
		stat = "Finished";
		break;

	default:
		stat = "Not started";
		break;
	}

	QTableWidgetItem* it = new QTableWidgetItem(QString("  ")+todo->Name);
	it->setData(Qt::UserRole+1,todo->id);
	Table->setItem(row,0,it);

	it = new QTableWidgetItem(QString("  ")+stat);
	it->setData(Qt::UserRole+1,todo->id);
	Table->setItem(row,2,it);

	it = new QTableWidgetItem(QString("  %1").arg(todo->Priority));
	it->setData(Qt::UserRole+1,todo->id);
	Table->setItem(row,3,it);

	it = new QTableWidgetItem(QString("  ")+todo->Cat->Name);
	it->setData(Qt::UserRole+1,todo->id);
	Table->setItem(row,4,it);

	Table->setCellWidget(row,1,bar);
	bar->setProperty("todoid",todo->id);

	Table->setRowHeight(row,Table->rowHeight(row)*0.6);
}
Table ist definiert als QTableWidget* Table;

Das Problem tritt auf meinem Windows XP Rechner mit Qt 4.2.2 und auf meinem kubuntu Rechner mit Qt 4.2.3 auf

Verfasst: 6. August 2007 14:50
von Zandru
keine Ahnung, aber was mich stutzig gemacht hat: warum fügst du Sachen in die Spalten 0,2,3,4 ein?

Verfasst: 6. August 2007 15:10
von Dawn
weil ich in die spalte 1 ein QProgressBar einfüge, dass ich nicht über setItem sondern über setCellWidget einfügen muss.
Wird ganz am ende der funktion gemacht.

Das ist echt zum verzweifeln.

Verfasst: 6. August 2007 15:26
von lepsai
ist setColumnCount() aufgerufen?

Verfasst: 6. August 2007 18:07
von Dawn
Jup... denn in den ersten beiden Zeilen wird ja alles richtig eingetragen

Verfasst: 6. August 2007 19:53
von lepsai
dann bitte den kompletten Code posten...

Verfasst: 6. August 2007 20:19
von Dawn
Ist aber schon ein wenig größer und auch nicht gerade schön und nicht kommentiert...

Verfasst: 30. September 2007 01:01
von Dawn
Für alle die es interessiert:
Ich hab den "Fehler" gefunden.

Man muss die Sortierung verrübergehend deaktivieren, damit die Items nicht in eine andere Reihe sortiert werden.

Verfasst: 11. Juni 2009 18:14
von mf2
Ich wei
ß, das hier ist ein alter Post, aber ich hatte das gleiche Problem und bin über Google hierhergekommen.

Die Sortierung vorübergehend zu deaktivieren war für mich keine Option, da dies ziemlich an der Performance nagt. Ich habe es wie folgt gelöst:

Code: Alles auswählen

a = new QTableWidgetItem(0);
a->setText("bla");
b = new QTableWidgetItem(0);

int row = 23;
table->setItem( row, 0, a );
row = a->row();
table->setItem( row, 1, b );
Ums zu beschreiben: Nachdem das erste Item in eine Reihe eingefügt wurde, überprüfe ich mittels QTableWidgetItem::row(), ob die Reihe "verrutscht" ist und nutze ggf. den neuen Wert.
Falls noch jemand dieses Problem hat, hoffe ich, dass dies hilfreich ist.