Russian Qt Forum

Qt => Model-View (MV) => Тема начата: sarbash от Июнь 24, 2010, 15:29



Название: [РЕШЕНО] QTableView - увеличить вертикальные просветы между строками?
Отправлено: sarbash от Июнь 24, 2010, 15:29
Всем привет.

Столкнулся с таким затруднением, что при использовании метода resizeRowsToContents() строки текста очень плотно друг за другом располагаются. Хотелось бы увеличить просвет между ними, но не могу понять, как это сделать. Догадываюсь, что копать нужно в делегате, но вот если бы кто подсказал, где конкретно, я был бы премного благодарен...


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: asvil от Июнь 24, 2010, 16:13
resizeRowsToContents берет рекомендуемое значение высоты из QAbstractItemDelegate::sizeHint()const;
Т.е. нужно переопределить данный метод в своем делегате, и установить делегата в представление:
setItemDelegate();


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: sarbash от Июнь 24, 2010, 16:54
Благодарю за ответ, пришёл к такому же выводу, что надо в свом делегате sizeHint подкрутить немного... Заодно и рамку фокуса подчищу, она мне не нужна в данном конкретном представлении. :)
Да, есть еще вопрос по QTableView, стоит ли здесь писать или лучше отдельным тредом?


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: asvil от Июнь 24, 2010, 17:34
Стоит.


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: lit-uriy от Июнь 24, 2010, 18:06
>>Да, есть еще вопрос по QTableView, стоит ли здесь писать или лучше отдельным тредом?
если бьётся с названием темы, то здесь


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: sarbash от Июнь 24, 2010, 20:59
Хорошо. Вопрос был в следующем: при изменении размеров основного окна, таблица чутко реагирует на изменения и соответственно подстраивает высоту строк под новый размер колонки, дабы вместить содержимое. Но, при распахивании окна на экран, таблица как бы игнорирует изменения и высота строк остается неизменной. Где грабли и можно ли как-то уловить максимизацию окна и принудительно послать таблице сигнал о изменении размера?
Спасибо.

И ещё момент, непосредственно связанный с этим вопросом - при первом отображении главного окна, подстройка размеров колонок под содержимое проходит ровно, но высота строк не изменяется, несмотря на наличие resizeRowsToContents. Оба метода задействованы в конструкторе основного окна. Неясно, почему первый отрабатывается, а на второй реакции нету? И можно ли это исправить?
Спасибо.


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: asvil от Июнь 24, 2010, 21:02
Возможно QHeaderView::setResizeMode();


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: mal от Июнь 25, 2010, 07:24
Берете у TableView  метод  QTableView::verticalHeader ()  , а далее задаете нужную вам высоту строк  методом QHeaderView::setDefaultSectionSize( height );
Я делаю это так:
Код:
void CMyTable::slot_set_row_height(int height)
{
p_tbl->verticalHeader()->setDefaultSectionSize( height );
p_tbl->setUpdatesEnabled(false);
p_tbl->verticalHeader()->hide();
p_tbl->verticalHeader()->show();
p_tbl->setUpdatesEnabled(true);
}
p_tbl в данном случае указатель на QTableWidget, но думаю что это не суть важно.
Проверено - работает.


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: sarbash от Июнь 25, 2010, 07:55
Вертикальные просветы я увеличил, а вот как победить авторазмер строк при максимизации/нормализации окна с таблицей?


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: sarbash от Июнь 25, 2010, 07:57
Берете у TableView  метод  QTableView::verticalHeader ()  , а далее задаете нужную вам высоту строк  методом QHeaderView::setDefaultSectionSize( height );
Благодарю за совет, возьму на заметку. Пока мне хватило небольшой модификации sizeHint у делегата. Добавил там к высоте строк 10 пикселей - по 5 сверху и снизу. Теперь смотрится аккуратно после resizeRowsToContents.


Название: Re: QTableView - увеличить вертикальные просветы между строками?
Отправлено: sarbash от Июнь 25, 2010, 09:59
С событием на изменение состояния окна я разобрался, а вот как сделать, чтобы метод resizeRowsToContents() вызывался только после того, как окно устаканится в новом состоянии?..

P.S. Вынес вопрос в отдельный топик, т.к. выяснилось, что это уже целая отдельная тема.