Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Hsilgos от Ноябрь 25, 2009, 17:21



Название: QTreeView и строки разного размера
Отправлено: 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 раз.
 В общем, такая вот проблемка нарисовалась. Если кто знает решение или знает, как это реализовать более элегантно, жду советов


Название: Re: QTreeView и строки разного размера
Отправлено: pastor от Ноябрь 25, 2009, 17:32
Можешь переопределить QItemDelegate::sizeHint(...) и задавать нужный размер из него


Название: Re: QTreeView и строки разного размера
Отправлено: Hsilgos от Ноябрь 25, 2009, 17:39
Можешь переопределить QItemDelegate::sizeHint(...) и задавать нужный размер из него
Я правильно понял, это можно будет делать динамически? У меня просто не получилось в своё время так сделать. Qt запоминал размер один раз и обновлял его только при вызове reset()


Название: Re: QTreeView и строки разного размера
Отправлено: Hsilgos от Ноябрь 25, 2009, 21:10
Нда... Позор моим сединам.
Нужно дергать
Код:
void QAbstractItemDelegate::sizeHintChanged ( const QModelIndex & index )   [signal]
без всякого reset()
Вопрос решен