You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:35:39