doitux
13-03-2006, 20:18
Hallo
Ich habe hier eine refresh-funktion für eine QListView. Am Anfang der Funktion merke ich mir die Position des ausgewählten Items um das selbe Item am Ende wieder zu selektieren.
int selectedPos(0);
if (listView1->selectedItem()!=0) {
selectedPos = listView1->selectedItem()->itemPos();
}
[...]
QPoint position (0,selectedPos);
listView1->setAllColumnsShowFocus(TRUE);
listView1->setSelected(listView1->itemAt(position) ,TRUE);
Das klappt im Prinzip auch ganz gut.
ABER:
Inzwischen ist die Liste so voll, dass man mit dem vertikalen Scrollbalken nach unten scrollen muss um die letzten Items zu sehen.
So lange ich die o.g. Refresh-Funktion aufrufe während ein Item in dem oberen Bereich (ohne zu scrollen) selektiert ist, ist alles ok.
Wenn ich aber nach unten scrolle und dann ein Item von unten selektiere und die Refresh-Funktion aufrufe gibts einen Speicherzugriffsfehler in dieser Refresh-Funktion.
Ich hab mir schon mal mit
cout << listView1->selectedItem()->itemPos() << "\n";
anzeigen lassen was da raus kommt. Am Anfang kommt 0 dann 18 dann 36 und immer so weiter Vielfache von 18.
Der Versuch mit "QPoint position (0,18);" immer die die 2. Postition manuell anzuwählen endet komischerweise gleich mit einem Speicherzugriffsfehler obwohl das doch auch nur ein int-Wert ist.
Hat jemand eine Idee was ich da falsch mache?
Gruß
doitux
Ich habe hier eine refresh-funktion für eine QListView. Am Anfang der Funktion merke ich mir die Position des ausgewählten Items um das selbe Item am Ende wieder zu selektieren.
int selectedPos(0);
if (listView1->selectedItem()!=0) {
selectedPos = listView1->selectedItem()->itemPos();
}
[...]
QPoint position (0,selectedPos);
listView1->setAllColumnsShowFocus(TRUE);
listView1->setSelected(listView1->itemAt(position) ,TRUE);
Das klappt im Prinzip auch ganz gut.
ABER:
Inzwischen ist die Liste so voll, dass man mit dem vertikalen Scrollbalken nach unten scrollen muss um die letzten Items zu sehen.
So lange ich die o.g. Refresh-Funktion aufrufe während ein Item in dem oberen Bereich (ohne zu scrollen) selektiert ist, ist alles ok.
Wenn ich aber nach unten scrolle und dann ein Item von unten selektiere und die Refresh-Funktion aufrufe gibts einen Speicherzugriffsfehler in dieser Refresh-Funktion.
Ich hab mir schon mal mit
cout << listView1->selectedItem()->itemPos() << "\n";
anzeigen lassen was da raus kommt. Am Anfang kommt 0 dann 18 dann 36 und immer so weiter Vielfache von 18.
Der Versuch mit "QPoint position (0,18);" immer die die 2. Postition manuell anzuwählen endet komischerweise gleich mit einem Speicherzugriffsfehler obwohl das doch auch nur ein int-Wert ist.
Hat jemand eine Idee was ich da falsch mache?
Gruß
doitux