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

如何避免QSplitter子部件在宽度缩至0前提前折叠

水平QSplitter子部件需缩至0宽度再折叠的问题解决

问题描述

需要实现一个水平方向的QSplitter,要求其包含的子部件宽度可以缩至0,且不会在到达边缘前提前折叠。
示例场景:QSplitter包含QWidget和QPushButton两个子部件时,按钮会在拖拽到边缘前就提前折叠。

最小复现代码

QSplitter *splitter = new QSplitter();
QWidget *widget = new QWidget;
QPushButton *button = new QPushButton("button");

widget->setStyleSheet("background: darkblue;");

splitter->addWidget(button);
splitter->addWidget(widget);

splitter->show();

splitter->setMinimumSize(100,100);

已尝试的无效方法

  • 调用setChildrenCollapsible(false):导致按钮无法缩至指定宽度以下
  • 将QSplitter及其所有子部件的最小宽度设为0,手动设置尺寸、修改尺寸策略为QSizePolicy::Ignored:无效果

已发现的现象

  • QWidget、QFrame作为QSplitter子部件时,可正常实现“缩至0宽度再折叠”的目标效果
  • 当前可通过将按钮嵌套进QWidget作为QSplitter子部件的方式解决问题,但希望避免这种嵌套方案

问题

  1. 为什么QPushButton作为QSplitter子部件会出现提前折叠的行为?
  2. 如何直接修改QPushButton或QSplitter的设置,实现按钮缩至宽度为0时再折叠?

内容的提问来源于stack exchange,提问作者CPPUIX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:02:27