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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Аналог центрального виджета в QMdiArea  (Прочитано 4635 раз)
aleksey.snake
Гость
« : Март 05, 2011, 13:22 »

Здравствуйте.

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

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Март 05, 2011, 13:25 »

Может viewport()->lower() поможет?
Записан

Qt 5.11/4.8.7 (X11/Win)
aleksey.snake
Гость
« Ответ #2 : Март 05, 2011, 13:34 »

Не помогло.
Чуть расскажу больше про реализацию.
Нужно положить на фон QTabWidget. Если класть только его, то не будет места под сворачиваемые окошки mdi, поэтому я кладу вниз окна QWidget с фиксированной высотой 16, как раз под высоту заголовка. Может тогда как-нибудь сделать это QWidget прозрачным для клика пользователя?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Март 05, 2011, 13:42 »

Цитировать
... поэтому я кладу вниз окна QWidget с фиксированной высотой 16, как раз под высоту заголовка
Очень порочная практика привязываться к фиксированным размерам элеметов GUI.
Для этого есть QStyle::pixelMetric( QStyle::PM_TitleBarHeight ).

Цитировать
Может тогда как-нибудь сделать это QWidget прозрачным для клика пользователя?
setAttribute( Qt::WA_TransparentForMouseEvents );
« Последнее редактирование: Март 05, 2011, 13:52 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
aleksey.snake
Гость
« Ответ #4 : Март 05, 2011, 14:02 »

Не помогло. Может нужно какое-то другое решение поставленной задачи?
А то прозрачные виджеты, мне кажется, тоже порочная практика.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 05, 2011, 14:11 »

Цитировать
Может нужно какое-то другое решение поставленной задачи?
Однозначно. Тем более ломать стандартный GUI тоже порочная практика Улыбающийся
Записан

Qt 5.11/4.8.7 (X11/Win)
aleksey.snake
Гость
« Ответ #6 : Март 05, 2011, 14:19 »

Еще и ресайз не работает.
Так как на этот серый фон положить виджет?
Или это такие строгие каноны mdi?
В 1С например есть постоянный элемент управления вместо фона.
Записан
JayFOX
Гость
« Ответ #7 : Март 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);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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