能否将TopDockWidgetArea改为垂直QSplitter式布局停靠部件?
实现顶部停靠区域垂直堆叠(类似垂直QSplitter)的方案
完全可以实现这种垂直堆叠的布局效果,以下是两种可行的实现方式:
方法一:通过QMainWindow的停靠分割API实现
直接利用Qt主窗口的停靠部件管理功能,指定垂直分割规则:
- 先限制所有目标停靠部件只能停靠在顶部区域:
dockA->setAllowedAreas(Qt::TopDockWidgetArea); dockB->setAllowedAreas(Qt::TopDockWidgetArea); dockC->setAllowedAreas(Qt::TopDockWidgetArea); - 依次添加并垂直分割停靠部件:
// 添加第一个部件到顶部停靠区 addDockWidget(Qt::TopDockWidgetArea, dockA); // 以垂直方向分割dockA和dockB splitDockWidget(dockA, dockB, Qt::Vertical); // 继续垂直分割dockB和dockC splitDockWidget(dockB, dockC, Qt::Vertical);
方法二:用垂直QSplitter包裹停靠部件
创建一个垂直方向的QSplitter,将所有停靠部件放入其中,再将Splitter作为整体添加到顶部停靠区:
QSplitter* topVerticalSplitter = new QSplitter(Qt::Vertical, this); topVerticalSplitter->addWidget(dockA); topVerticalSplitter->addWidget(dockB); topVerticalSplitter->addWidget(dockC); // 将垂直Splitter添加到顶部停靠区域 addDockWidget(Qt::TopDockWidgetArea, topVerticalSplitter);
额外优化
- 如果需要固定各部件的高度比例,可调用
QSplitter::setStretchFactor()设置拉伸权重,比如:topVerticalSplitter->setStretchFactor(0, 1); // dockA占1份高度 topVerticalSplitter->setStretchFactor(1, 2); // dockB占2份高度 topVerticalSplitter->setStretchFactor(2, 1); // dockC占1份高度 - 若要禁止用户调整部件高度,可设置
QSplitter::setHandleWidth(0)或锁定Splitter的大小。
内容的提问来源于stack exchange,提问作者Techniquab
相关产品推荐
相关产品推荐

