Gültigen neuen QModelIndex erzeugen

Alles zum Qt Framework für Java
Antworten
Micha
Beiträge: 5
Registriert: 16. Februar 2010 11:13

Gültigen neuen QModelIndex erzeugen

Beitrag von Micha »

ich möchte, das durch einen Klick in eine beliebige Zelle meiner Tabelle jeweils die komplette Zeile ausgewählt wird.
Da vor dem Klick bereits eine Zelle/Zeile ausgewählt sein könnte, will ich einfach in meinem QSelectionModel über die Liste der bereits ausgewählt Zellen gehen und dann in einem neuen QItemSelection-Objekt den Bereich von der ersten bis zu letzten Spalte dieser Zeile setzen.
Diese Selection vermenge ich dann mit der bereits vorhandenen Selection und weiße das Endergebnis wiederum meinem SelectionModel zu.

Um die neue Selection zu erzeugen, benötige ich ein QModelIndex für Start- und Endposition. Diese lassen sich aber leider nicht direkt erzeugen. Ich habe zwar von einer createIndex-Methode in QAbstractModelIndex gelesen, diese scheint aber in Jambi nicht verfügbar zu sein. Ich habe von einem Trick gelesen, dass man aus einem QStandardModel per index()-Methode ein QModelIndex erhalten kann, welcher dann die eigene Zeile und Spalte enthält, leider erhalte ich aber in meiner Umsetzung damit nur ungültige (leere) QModelIndexe.

Wie kann ich denn korrekt einen QModelIndex erzeugen?

Hier mal noch der Quelltext, wie ich ihn bislang geschrieben habe (funktioniert halt noch nicht wie gewünscht):

Code: Alles auswählen

private void selectRow()
	{
		List<QModelIndex> selected = new ArrayList<QModelIndex>();
		selected = selectionModel.selectedIndexes();
		QItemSelection completeRowsSelection = new QItemSelection();

		for (QModelIndex index : selected)
		{
			// QModelIndex firstColumn = new QModelIndex(index.row(), 0);

			QItemSelection completeRowSelection = new QItemSelection();

			QModelIndex startPoint = new QStandardItemModel().index(index.row(), 0);
			QModelIndex endPoint = new QStandardItemModel().index(index.row(), model.columnCount());
			completeRowSelection.select(startPoint, endPoint);
			completeRowsSelection.merge(completeRowSelection);
		}
selectionModel.select(completeRowsSelection);

Danke für eure Mühe

Micha
}
Antworten