首页 > 解决方案 > 设置垂直和水平 QToolBar 定位之间的优先级

问题描述

我已经搜索了很长时间,但我还没有找到解决这个问题的方法:在 QtCreator 中,我有一个带有 2 个 QToolBars 的主窗口,一个垂直的(Qt::LeftToolBarArea)和一个水平的(Qt: :底部工具栏区域)。这个想法是在左侧有一个主工具栏,在底部有一个辅助工具栏,只有几个小部件。

现在的问题是,无论我尝试什么,在添加底部工具栏时,左侧工具栏的高度都会缩小以为它腾出空间。是否可以反转行为?底部工具栏是否缩小为垂直工具栏腾出空间?

Qt 文档似乎并不否认这种可能性: QMainWindow generic layout with no specification about Horizo​​ntal toolbars are more "important" than others

环顾四周,我发现这个人有同样的问题(不过运气不好): https ://forum.qt.io/topic/62936/qtoolbar-positioning-within-qmainwindow

还有这张照片,但我不确定它是官方的: 工具栏之间的可能优先级(未记录)

有人知道这是一个失败的原因还是有一些技巧可以实现我正在寻找的东西?

编辑:

我找到了我正在寻找的东西,不幸的是它似乎只适用于 QDockWidgets: http ://doc.qt.io/archives/qt-4.8/qmainwindow.html#setCorner

标签: qtqt-creatortoolbarqmainwindowqtoolbar

解决方案


自 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...

推荐阅读