Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: navrocky от Ноябрь 17, 2010, 12:42



Название: Как задать размер клиентской области в QMdiSubWindow?
Отправлено: navrocky от Ноябрь 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-окно, замерить размер его границ и занести в константу для дальнейшего использования (((


Название: Re: Как задать размер клиентской области в QMdiSubWindow?
Отправлено: BRE от Ноябрь 17, 2010, 12:46
Попробуй переобпределить для root_widget:
virtual QSize   sizeHint () const


Название: Re: Как задать размер клиентской области в QMdiSubWindow?
Отправлено: navrocky от Ноябрь 17, 2010, 13:08
Попробуй переобпределить для root_widget:
virtual QSize   sizeHint () const

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

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


Название: Re: Как задать размер клиентской области в QMdiSubWindow?
Отправлено: navrocky от Ноябрь 17, 2010, 17:36
Внезапно обнаружился косяк. Если sizeHint больше размеров QMdiArea, то окно QMdiSubWindow создается по размерам QMdiArea, т.е. меньше чем надо. ((


Название: Re: Как задать размер клиентской области в QMdiSubWindow?
Отправлено: rrmini от Ноябрь 18, 2010, 17:04
Внезапно обнаружился косяк. Если sizeHint больше размеров QMdiArea, то окно QMdiSubWindow создается по размерам QMdiArea, т.е. меньше чем надо. ((

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

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


Название: Re: Как задать размер клиентской области в QMdiSubWindow?
Отправлено: navrocky от Ноябрь 19, 2010, 13:40
может это поможет:

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

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

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


Название: Re: Как задать размер клиентской области в QMdiSubWindow?
Отправлено: cemehehko от Декабрь 15, 2010, 16:44
Есть ещё такой рабочий костыль:
Код:
            
QSize prevSize=view->minimumSize();
view->setMinimumSize( width,height);
sub->adjustSize();
view->setMinimumSize(prevSize);
P.S. и работает тоже не всегда