[qt-4.2 Linux]
есть модель ....
item_1
item_1_2
item_1_3
item_1_4
item_2
item_2_1
item_2_2
item_2_3
item_2_4
и так далее ...
и два вивера созданных от QAbstarctItemView - JListView.
Если в моём классе JListView, созданом от QAbstarctItemView, прописано
QModelIndex JListView::moveCursor(QAbstractItemView::CursorAction cursorAction,
Qt::KeyboardModifiers /*modifiers*/)
{
QModelIndex current = currentIndex();
switch (cursorAction) {
case MoveLeft:
case MoveUp:
if (current.row() > 0)
current = model()->index(current.row() - 1, current.column(),
rootIndex());
else
current = model()->index(0, current.column(), rootIndex());
break;
case MoveRight:
case MoveDown:
if (current.row() < rows(current) - 1)
current = model()->index(current.row() + 1, current.column(),
rootIndex());
else
current = model()->index(rows(current) - 1, current.column(),
rootIndex());
break;
default:
break;
}
viewport()->update();
return current;
}
и в MainWindow создан экземпляр JListView
то кнопками перемещения курсора навигация по строкам идет так как надо .... однако ... если этот метод в реализации класса JListView закоментировать и использовать программную навигацию по строкам непосредственно в классе MainWindow, такого вида:
void MainWindow::selectPrevItem(){
if (model->rowCount() <= 1)
{
} else
{
int iRow = my_ JList->currentIndex().row();
if (0 < iRow)
{
my_ JList->setCurrentIndex(model->index(iRow - 1, 0));
}
}
}
void MainWindow::selectNextItem(){
if (model->rowCount() <= 1)
{
return;
} else
{
int iRow = my_ JList->currentIndex().row();
if (model->rowCount()-1 > iRow)
{
my_ JList->setCurrentIndex(model->index(iRow + 1, 0));
}
}
}
то навигация тормозит очень сильно ... тормозит именно перемещение построкам ... как бы с замерзанием . Если реализацию moveCursor раскоментирновать и использовать паралельно с программной навигацией то так же тормозит очень ...
как сделать навигацию по строкам правильно и без тормозов .... ?