Russian Qt Forum
Августа 26, 2025, 20:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подгонка размера QTableWidget  (Прочитано 6759 раз)
alex12
Гость
« : Августа 28, 2007, 09:26 »

Всем привет!

Есть небольшая таблица QTableWidget. Хочу сделать так, чтобы ее нельзя было уменьшить до появления скроллеров. Очевидно, нужно поставить правильный setMinimumSize(...). Но никак не могу найти, как же правильно получить этот размер.

Может кто c таким сталкивался?
Записан
Lion
Гость
« Ответ #1 : Августа 28, 2007, 18:08 »

Попробуй складывать размеры столбцов из QHeaderView::sectionSize ( int logicalIndex ) const
Записан
alex12
Гость
« Ответ #2 : Августа 28, 2007, 20:30 »

Цитировать
Попробуй складывать размеры столбцов из QHeaderView::sectionSize ( int logicalIndex ) const

К сожалению, все не так просто. Грустный

Вот такой размер (tw -- это QTableWidget):
Код:
QSize( tw->horizontalHeader()->length() + tw->verticalHeader()->width(), 
       tw->verticalHeader()->length() + tw->horizontalHeader()->height() )
дает примерно то, что нужно, но немного меньше. Нужно прибавить еще что-то (около 20 пикселей). Но сам такой подход -- чистый подгон.

Неужели нет функции, которая возвращает размер рабочей области ??!!

Я начал копать в сторону:
Код:
QSize QAbstractScrollArea::maximumViewportSize () const


Returns the size of the viewport as if the scroll bars had no valid scrolling range.
но и там облом: размер явно меньше области и не зависит от количества строк/столбцов. Обеспокоенный
Записан
alexis
Гость
« Ответ #3 : Августа 28, 2007, 20:51 »

а как насчет:
Код:
viewport()->size() 
?
Записан
alex12
Гость
« Ответ #4 : Августа 28, 2007, 21:26 »

Цитировать
а как насчет:
Code:
viewport()->size()
?

К сожалению, не то. Это размер области вывода QAbstractScrollArea. Т.е. размер самого QAbstractScrollArea без скроллеров. Вот если бы был QScrollArea, то там есть widget()->size()  Обеспокоенный
Записан
alexis
Гость
« Ответ #5 : Августа 28, 2007, 21:40 »

ну так прибавь еще и размеры скроллеров:
horizontalScrollBar ()->height()
verticalScrollBar ()->width()
Записан
alex12
Гость
« Ответ #6 : Августа 29, 2007, 11:57 »

Цитировать
а как насчет:
Code:
viewport()->size()
?
Цитировать
ну так прибавь еще и размеры скроллеров:
horizontalScrollBar ()->height()
verticalScrollBar ()->width()

Да нет... Это не то. Это размер области вывода на экране. А нужен размер всей рабочей области QTableWidget.
Записан
Lion
Гость
« Ответ #7 : Февраля 06, 2008, 16:25 »

Так всё-таки удалось найти решение?
Записан
alex12
Гость
« Ответ #8 : Февраля 06, 2008, 18:56 »

Правильного и простого решения я не нашел.

Уже в другом месте и по другому поводу  Подмигивающий использовал вот такой код ( w - указатель на Widget ):

Код:
QStyleOption opt;
      opt.initFrom(w);
      QSize sz = w->size();
      int hh = ( w->sizeHintForRow(0) + 2*w->spacing() ) * qMin( w->count(),15);
      hh +=  w->spacing() + w->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &opt, w) * 2;
      hh +=  w->style()->pixelMetric(QStyle::PM_MenuVMargin, &opt, w) * 2;
      int ww = w->sizeHintForColumn(0);
      ww +=  w->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &opt, w) * 2;
      ww +=  w->style()->pixelMetric(QStyle::PM_MenuVMargin, &opt, w) * 2;

Похоже, что надо разбираться с QStyleOption.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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