Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: aleksey.snake от Март 05, 2011, 13:22



Название: Аналог центрального виджета в QMdiArea
Отправлено: aleksey.snake от Март 05, 2011, 13:22
Здравствуйте.

    Пишу многооконное приложение. Нужно чтобы вместо фона QMdiArea был виджет. Аналогично, как у QMainWindow есть метод setCentralWidget().
Пробовал использовать setViewport(), но тогда в некоторых случаях свернутые окна уходят на задний план и пользователю их больше не развернуть.
Как можно поместить виджет на QMdiArea так, чтоб он не перекрывал сворачиваемые окна?
Спасибо.


Название: Re: Аналог центрального виджета в QMdiArea
Отправлено: GreatSnake от Март 05, 2011, 13:25
Может viewport()->lower() поможет?


Название: Re: Аналог центрального виджета в QMdiArea
Отправлено: aleksey.snake от Март 05, 2011, 13:34
Не помогло.
Чуть расскажу больше про реализацию.
Нужно положить на фон QTabWidget. Если класть только его, то не будет места под сворачиваемые окошки mdi, поэтому я кладу вниз окна QWidget с фиксированной высотой 16, как раз под высоту заголовка. Может тогда как-нибудь сделать это QWidget прозрачным для клика пользователя?


Название: Re: Аналог центрального виджета в QMdiArea
Отправлено: GreatSnake от Март 05, 2011, 13:42
Цитировать
... поэтому я кладу вниз окна QWidget с фиксированной высотой 16, как раз под высоту заголовка
Очень порочная практика привязываться к фиксированным размерам элеметов GUI.
Для этого есть QStyle::pixelMetric( QStyle::PM_TitleBarHeight ).

Цитировать
Может тогда как-нибудь сделать это QWidget прозрачным для клика пользователя?
setAttribute( Qt::WA_TransparentForMouseEvents );


Название: Re: Аналог центрального виджета в QMdiArea
Отправлено: aleksey.snake от Март 05, 2011, 14:02
Не помогло. Может нужно какое-то другое решение поставленной задачи?
А то прозрачные виджеты, мне кажется, тоже порочная практика.


Название: Re: Аналог центрального виджета в QMdiArea
Отправлено: GreatSnake от Март 05, 2011, 14:11
Цитировать
Может нужно какое-то другое решение поставленной задачи?
Однозначно. Тем более ломать стандартный GUI тоже порочная практика :)


Название: Re: Аналог центрального виджета в QMdiArea
Отправлено: aleksey.snake от Март 05, 2011, 14:19
Еще и ресайз не работает.
Так как на этот серый фон положить виджет?
Или это такие строгие каноны mdi?
В 1С например есть постоянный элемент управления вместо фона.


Название: Re: Аналог центрального виджета в QMdiArea
Отправлено: JayFOX от Март 07, 2011, 10:56
Как вариант:
Код:
QTabWidget *tab = new QTabWidget;
QVBoxLayout *lay = new QVBoxLayout;
lay->addWidget(tab);
lay->setContentsMargins(0,0,0,32);//Ну или QStyle::
QWidget *w = new QWidget;
w->setLayout(lay);
QMdiArea *area = new QMdiArea;
area->setViewport(w);