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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как задать размер клиентской области в QMdiSubWindow?  (Прочитано 4559 раз)
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Ноябрь 17, 2010, 12:42 »

Нужно задать определенный внутренний размер MDI-окна.

Код ниже задает внешний размер (с шапкой и границами). Т.е. для MDI-окна frameGeometry и geometry - одно и то же (
Код
C++ (Qt)
mdi_sw_ = mdi_area()->addSubWindow(root_widget());
mdi_sw_->resize(initial_size_);
 

Костыли типа:
Код
C++ (Qt)
mdi_sw_ = mdi_area()->addSubWindow(root_widget());
mdi_sw_->setVisible(true);
mdi_sw_->adjustSize();
mdi_sw_->widget()->adjustSize();
QSize delta = mdi_sw_->size() - mdi_sw_->widget()->size();
mdi_sw_->resize(initial_size_ + delta);
 

не помогают Грустный Окно пока не отобразилось на экран, его размеры некорректны...

Что делать?

Сейчас вижу только один страшный костыль, при старте программы отобразить mdi-окно, замерить размер его границ и занести в константу для дальнейшего использования (((
Записан

Гугль в помощь
BRE
Гость
« Ответ #1 : Ноябрь 17, 2010, 12:46 »

Попробуй переобпределить для root_widget:
virtual QSize   sizeHint () const
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Ноябрь 17, 2010, 13:08 »

Попробуй переобпределить для root_widget:
virtual QSize   sizeHint () const

Помогло спасибо )

Интересно есть ли более простое решение?
Записан

Гугль в помощь
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Ноябрь 17, 2010, 17:36 »

Внезапно обнаружился косяк. Если sizeHint больше размеров QMdiArea, то окно QMdiSubWindow создается по размерам QMdiArea, т.е. меньше чем надо. ((
Записан

Гугль в помощь
rrmini
Гость
« Ответ #4 : Ноябрь 18, 2010, 17:04 »

Внезапно обнаружился косяк. Если sizeHint больше размеров QMdiArea, то окно QMdiSubWindow создается по размерам QMdiArea, т.е. меньше чем надо. ((

может это поможет:

mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Ноябрь 19, 2010, 13:40 »

может это поможет:

mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

Дык оно вроде по умолчанию так и есть, скроллбары появляются при необходимости.

Сейчас нагородил различных синхронизаций размеров с вложенным виджетом для других целей, внезапно окошко открывается теперь всегда с нужным размером. Но это конечно не решение проблемы (
Записан

Гугль в помощь
cemehehko
Гость
« Ответ #6 : Декабрь 15, 2010, 16:44 »

Есть ещё такой рабочий костыль:
Код:
            
QSize prevSize=view->minimumSize();
view->setMinimumSize( width,height);
sub->adjustSize();
view->setMinimumSize(prevSize);
P.S. и работает тоже не всегда
« Последнее редактирование: Декабрь 15, 2010, 16:48 от cemehehko » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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