Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Выделение строки в QTreeView.


Автор: OlegIT 18.12.2012, 09:03
Есть отображение QTreeView. Мышью выделяю строку, потом нажимаю кнопку в меню или по которой делаю swap(…) элементов. Всё работает, но при этом теряется выделение строки. Для того, что бы сохранить выделенную строку перед swap(…)сохраняю выделение
Код

    QModelIndexList RSel = treeView->selectionModel()->selectedRows();
после swap(…) восстанавливаю
Код

    treeView->setCurrentIndex(RSel[0]);

Но выделение строки остаётся на месте, хотя строка, которую я выделил, перемещается на нужное место. Как программно отследить позицию строки и правильно поставить выделение?

Автор: math64 18.12.2012, 09:58
Индекс представляет из себя (номер строки, номер колонки, родительский индекс). После перестановки строк он становится невалидным или указывает на другую строку, поскольку эти данные поменялись.
Нужно создавать новый индекс.

Автор: OlegIT 18.12.2012, 10:47
Цитата(math64 @  18.12.2012,  09:58 Найти цитируемый пост)
Нужно создавать новый индекс. 

Простым изменением номера строки?

Автор: math64 18.12.2012, 11:49
Если родителя не перемещаешь:
Код

QModelIndex parent = index.parent();
int row =  index.row();
int col = index.column();
...
QModelIndex newIndex = parent.child(newRow, newColumn);

Автор: OlegIT 18.12.2012, 12:49
Сделал так
Код

    QModelIndexList RSel = treeView->selectionModel()->selectedIndexes();
    …………………
    swap(…);
    …………………
    QModelIndex SelF = m_TreeModel->index(RSel.at(0).row()+N,0,
                                      m_TreeModel->parent(RSel.at(0)));
    treeView->setCurrentIndex(SelF);


N зависит от swap, что и куда.
Работает.
Или лучше как Вы указали?

Автор: math64 18.12.2012, 13:56
Раз работает - оставляйте так. Можно ещё использовать index.sibling(row, column); - соседний индекс с тем же родителем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)