crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Проблемы с размерами скрытых виджетов
RDron
  опции профиля:
сообщение 15.6.2008, 20:10
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 15.6.2008
Пользователь №: 202

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте.
Проблема вот в чём: есть программа с табами, в конструкторе главного окна в одном табе часть виджетов скрывается (они показываеютя только группами), но пока не перейдешь на этот таб изменить размер окна (уменьшить его) не получается. В этом табе размер выставлен для отображения всех виджетов, а не только тех, что отображаются. Даже если вызывать repaint и после этого resize( minimumSizeHint() ) размер не изменится (пока не перейдёшь на тот таб). Я так понял, что пока виджет не виден Qt не производит с ним действий по вычислению его размеров перерисовке. Единственный выход который я нашел это при старте быстро перейти на нужный таб изменить размер окна и перейти обратно на первый таб, но это вызывает "мигание"...
Как сделать перерисовку под нужные размеры не показывая виджет, который нужно перерисовать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 15.6.2008, 21:49
Сообщение #2


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


переопредели функцию virtual QSize sizeHint();
example:
QSize sizeHint() {
return QSize(x, y); //эта функция должна просто возвращать рекомендуемые размеры виджета, на нее будет ориентироваться Qt при рисовании
}

также возможно тебе понадобится функция setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)

Сообщение отредактировал void* - 15.6.2008, 21:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RDron
  опции профиля:
сообщение 16.6.2008, 9:13
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 15.6.2008
Пользователь №: 202

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо void*, помогло!
В моём случае можно доже не переопределять sizeHint(), просто вызвав setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored ) получится добиться нужного эффекта.
У меня главное окно гораздо больших размеров чем виджеты отображаемые в этом табе (когда они не все вместе отображаются), поэтому можно даже не вычислять sizeHint().
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 16.6.2008, 9:48
Сообщение #4


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


не знаю, что тебе именно нужно, но учти что при QSizePolicy::Ignored предоставляет виджету как можно больше места, и могут быть неожиданные результаты :)
вот, если хочешь еще почитай про перечисление QSizePolicy::SizeType(из книги):
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 22:45