Eine Klasse "Daten" wird gespeichert in einer Liste "QList<Daten *>". Daten aus dieser Liste werden in einem QListView (sortiert) angezeigt.
QListView erhält die Daten über ein "QSortFilterProxyModel" von einer aus "QAbstractListModel" abgeleiteten Klasse.
Mit "append(Daten *daten)" füge ich der Liste neue Daten hinzu und möchte anschließend in der ListView zur neuen Zeile springen. Vereinfacht mit diesem Ablauf(genaues siehe unten):
Code: Alles auswählen
int row = datenClass.count();
datenList.insert(row,daten);
sort();
QModelIndex index = proxyModel->mapFromSource(datenClass->index(row,0));
ui->listView->setCurrentIndex(index);
Mit Qt4.8.1 läuft das Programm wie erwartet, aber bei Qt5.0 gibt es in der Zeile "setCurrentIndex(index)" Probleme und das Programm stürzt ab.
Hier ein Auszug aus dem Programmcode
Code: Alles auswählen
class Daten {
.....
.....
};
class DatenClass : public QAbstractListModel {
.....
.....
private:
QList<Daten *> datenList;
};
int DatenClass::append(Daten *daten){
int row = datenClass.count();
emit layoutAboutToBeChanged();
beginInsertRows(QModelIndex(),row,row+1);
datenList.insert(row,daten);
endInsertRows();
emit layoutChanged();
return row;
}
MainProg::MainProg(.....) {
datenClass = new DatenClass(this);
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(datenClass);
ui->listView->setModel(proxyModel);
.....
connect(datenClass,SIGNAL(layoutChanged()),this,SLOT(sort()));
}
void MainProg::sort(void){
proxyModel->sort(0);
}
int MainProg::setCurrentRowFromSource(int row){
QModelIndex index = proxyModel->mapFromSource(datenClass->index(row,0));
if ( index.isValid() ) {
row = index.row();
ui->listView->setCurrentIndex(index);
}
return row;
}
int row = datenClass->append(new Daten(.....));
setCurrentRowFromSource(row);