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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QTableView - увеличить вертикальные просветы между строками?  (Прочитано 6404 раз)
sarbash
Гость
« : Июнь 24, 2010, 15:29 »

Всем привет.

Столкнулся с таким затруднением, что при использовании метода resizeRowsToContents() строки текста очень плотно друг за другом располагаются. Хотелось бы увеличить просвет между ними, но не могу понять, как это сделать. Догадываюсь, что копать нужно в делегате, но вот если бы кто подсказал, где конкретно, я был бы премного благодарен...
« Последнее редактирование: Июнь 25, 2010, 10:39 от sarbash » Записан
asvil
Гость
« Ответ #1 : Июнь 24, 2010, 16:13 »

resizeRowsToContents берет рекомендуемое значение высоты из QAbstractItemDelegate::sizeHint()const;
Т.е. нужно переопределить данный метод в своем делегате, и установить делегата в представление:
setItemDelegate();
Записан
sarbash
Гость
« Ответ #2 : Июнь 24, 2010, 16:54 »

Благодарю за ответ, пришёл к такому же выводу, что надо в свом делегате sizeHint подкрутить немного... Заодно и рамку фокуса подчищу, она мне не нужна в данном конкретном представлении. Улыбающийся
Да, есть еще вопрос по QTableView, стоит ли здесь писать или лучше отдельным тредом?
Записан
asvil
Гость
« Ответ #3 : Июнь 24, 2010, 17:34 »

Стоит.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Июнь 24, 2010, 18:06 »

>>Да, есть еще вопрос по QTableView, стоит ли здесь писать или лучше отдельным тредом?
если бьётся с названием темы, то здесь
Записан

Юра.
sarbash
Гость
« Ответ #5 : Июнь 24, 2010, 20:59 »

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

И ещё момент, непосредственно связанный с этим вопросом - при первом отображении главного окна, подстройка размеров колонок под содержимое проходит ровно, но высота строк не изменяется, несмотря на наличие resizeRowsToContents. Оба метода задействованы в конструкторе основного окна. Неясно, почему первый отрабатывается, а на второй реакции нету? И можно ли это исправить?
Спасибо.
Записан
asvil
Гость
« Ответ #6 : Июнь 24, 2010, 21:02 »

Возможно QHeaderView::setResizeMode();
Записан
mal
Гость
« Ответ #7 : Июнь 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, но думаю что это не суть важно.
Проверено - работает.
Записан
sarbash
Гость
« Ответ #8 : Июнь 25, 2010, 07:55 »

Вертикальные просветы я увеличил, а вот как победить авторазмер строк при максимизации/нормализации окна с таблицей?
Записан
sarbash
Гость
« Ответ #9 : Июнь 25, 2010, 07:57 »

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

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

P.S. Вынес вопрос в отдельный топик, т.к. выяснилось, что это уже целая отдельная тема.
« Последнее редактирование: Июнь 25, 2010, 10:49 от sarbash » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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