Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение строки в QTreeView. 
:(
    Опции темы
OlegIT
Дата 18.12.2012, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



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

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

    treeView->setCurrentIndex(RSel[0]);

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

PM MAIL   Вверх
math64
Дата 18.12.2012, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Индекс представляет из себя (номер строки, номер колонки, родительский индекс). После перестановки строк он становится невалидным или указывает на другую строку, поскольку эти данные поменялись.
Нужно создавать новый индекс.
PM   Вверх
OlegIT
Дата 18.12.2012, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



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

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

PM MAIL   Вверх
math64
Дата 18.12.2012, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Если родителя не перемещаешь:
Код

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

PM   Вверх
OlegIT
Дата 18.12.2012, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Сделал так
Код

    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, что и куда.
Работает.
Или лучше как Вы указали?
PM MAIL   Вверх
math64
Дата 18.12.2012, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Раз работает - оставляйте так. Можно ещё использовать index.sibling(row, column); - соседний индекс с тем же родителем.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.