QModelIndexList QItemSelectionModel::selectedRows(int column)
erhalte ich eine Liste mit allen Zellen einer Tabellenspalte falls die komplette Reihe selektiert ist.Returns the indexes in the given column for the rows where all columns are selected.
Wenn also in meiner Tabelle ( QTableListView ) die kompletten Zeilen 4,5 und 6 selektiert sind erhalte ich für eine Spalte z.B. selectedRows(3) die Zellen:
Zelle(Spalte3,Reihe4) , Zelle(Spalte3,Reihe5) , Zelle(Spalte3,Reihe6)
und für eine Spalte z.B. selectedRows(5) die Zellen:
Zelle(Spalte5,Reihe4) , Zelle(Spalte5,Reihe5) , Zelle(Spalte5,Reihe6)
So hat das bisher ( mit QT4.3.4 ) auch problemlos funktioniert.
Nach Umstellung auf QT 4.4.3 ist aber die Reihenfolge der Reihen nicht mehr gleich.
jetzt kommt ( mehr oder weniger zufällig ) z.B.
für eine Spalte z.B. selectedRows(3) die Zellen:
Zelle(Spalte3,Reihe5) , Zelle(Spalte3,Reihe4) , Zelle(Spalte3,Reihe6)
und für eine Spalte z.B. selectedRows(5) die Zellen:
Zelle(Spalte5,Reihe6) , Zelle(Spalte5,Reihe5) , Zelle(Spalte5,Reihe4)
Darf ich jetzt erwarten, dass die Reihenfolge der Reihen für jede Spalte gleich ist ( wie bei QT4.3.4 ) und ist demnach QT4.4.3 fehlerhaft ?
Kann dieses Verhalten jemand bestätigen ?
Gibt es eine bessere ( sicherere ) Methode um an die selektierten Zeilen zu kommen ?
Für die Tests benutze ich:
Alt: QT4.3.4 auf Ubuntu 8.04
Neu: QT4.4.3 auf Ubuntu 8.10
Und noch ein Hinweis:
Wenn ich das Programm mit QT4.4.3 erstelle und dann auf dem Rechner mit QT4.3.4 laufen lasse, stimmt die Reihenfolge wieder.
Zum Schluss noch das Stück Code das mir diese Probleme bereitet.
Code: Alles auswählen
QString QDragTableView::selectedRows(QList<int> columns){
QList<QModelIndexList> cols;
int colCount = columns.count();
for ( int c = 0 ; c < colCount ; c++) {
cols.append(selectionModel()->selectedRows(columns[c]));
}
QString lineSeparator= "";
QString zelle = "";
QString text = "";
for ( int i = 0; i < cols[0].count(); i++) {
for ( int c = 0 ; c < colCount ; c++) {
zelle = "("+QString::number(cols[c][i].row())+":"+QString::number(cols[c][i].column())+")";
text += zelle;
}
lineSeparator = "\n";
}
return text;
}