Russian Qt Forum
Ноябрь 24, 2024, 11:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeView и строки разного размера  (Прочитано 3959 раз)
Hsilgos
Гость
« : Ноябрь 25, 2009, 17:21 »

Написана своя модель и делегат для QTreeView.
Модель расчитана для работы со строками разного размера.
Размер строки динамический. Та строка, которая в данный момент выделена (если она одна) имеет размер больше, чем другие. Т.е. отображается какая-то расширенная информация.
Изменение размера делается в лоб: Код

Код:
// slot на изменения размера
void MyView::selectChanged(const QItemSelection& a_first,const QItemSelection& a_second)
{
    bool t_needReset    = false;

    int t_wasSelected    = a_first.count();
    int t_isSelected    = a_second.count();

    if( 1 == t_wasSelected || 1 == t_isSelected )
        t_needReset = true;

    if( t_needReset )
        reset();
}


Если я двигаюсь по дереву с помощью клавиатуры, или нет поддеревьев (т.е. просто список, без узлов) то всё работает отлично. Но если кликать мышой, то работает некорректно. Поддерево закрывается, потом открывается и выделение снимается. В дебаге посмотрел, вы время клика мышью сигнал selectionChanged дергается 2 раза, а если "хожу" по дереву клавиатурой - 1 раз.
 В общем, такая вот проблемка нарисовалась. Если кто знает решение или знает, как это реализовать более элегантно, жду советов
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Ноябрь 25, 2009, 17:32 »

Можешь переопределить QItemDelegate::sizeHint(...) и задавать нужный размер из него
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Hsilgos
Гость
« Ответ #2 : Ноябрь 25, 2009, 17:39 »

Можешь переопределить QItemDelegate::sizeHint(...) и задавать нужный размер из него
Я правильно понял, это можно будет делать динамически? У меня просто не получилось в своё время так сделать. Qt запоминал размер один раз и обновлял его только при вызове reset()
Записан
Hsilgos
Гость
« Ответ #3 : Ноябрь 25, 2009, 21:10 »

Нда... Позор моим сединам.
Нужно дергать
Код:
void QAbstractItemDelegate::sizeHintChanged ( const QModelIndex & index )   [signal]
без всякого reset()
Вопрос решен
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.