Установить приоритет между вертикальным и горизонтальным позиционированием QToolBar - PullRequest
0 голосов
/ 22 мая 2018

Я искал довольно долго, но мне не удалось найти решение этой проблемы: в QtCreator у меня есть главное окно с двумя QToolBars, одним вертикальным (Qt :: LeftToolBarArea) и одним горизонтальным(Qt :: BottomToolBarArea).Идея состоит в том, чтобы иметь основную панель инструментов слева и дополнительную панель инструментов внизу, всего с несколькими виджетами.

Теперь проблема в том, что независимо от того, что я пытаюсь, при добавлении нижней панели инструментов, слевакаждый сжимается в высоту, чтобы освободить место для этого.Можно ли инвертировать поведение? Уменьшена ли нижняя панель инструментов, чтобы освободить место для вертикальной?

Документация Qt, по-видимому, не отрицает эту возможность: Общая компоновка QMainWindow без указания того, что горизонтальные панели инструментов более«важнее», чем другиеуверен, что это официально: Возможный приоритет (недокументированный) между панелями инструментов

Кто-нибудь знает, если это потерянная причина или есть какой-то трюк для достижения того, что я ищу?

РЕДАКТИРОВАТЬ:

Я нашел именно то, что мне нужно, к сожалению, оно доступно только для QDockWidgets: http://doc.qt.io/archives/qt-4.8/qmainwindow.html#setCorner

1 Ответ

0 голосов
/ 23 мая 2018

Начиная с Qt4, панели инструментов занимают свои собственные области вокруг центрального виджета с фиксированными позициями, поэтому я не верю, что есть простое решение для того, что вы хотите, используя QToolBar напрямую.Тем не менее, есть простое решение с QDockWidgets (как вы указали).Просто поместите каждый QToolBar в отдельный QDockWidget и используйте QMainWindow::setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea)

. У меня нет доступа к компилятору, но должно быть что-то вроде:

QMainWindow mainWindow;
mainWindow.setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);

auto dock = new QDockWidget("Dock", &mainWindow);
auto windowInsideDock = new QMainWindow(dock, Qt::Widget);
auto toolBar = new QToolBar(windowInsideDock);
windowInsideDock->addToolBar(toolBar);
dock->setWidget(insideDock);
mainWindow.addDockWidget(Qt::LeftDockWidgetArea, dock);
//... similar for bottom widget...
...