如何避免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子部件的方式解决问题,但希望避免这种嵌套方案
问题
- 为什么QPushButton作为QSplitter子部件会出现提前折叠的行为?
- 如何直接修改QPushButton或QSplitter的设置,实现按钮缩至宽度为0时再折叠?
内容的提问来源于stack exchange,提问作者CPPUIX
相关产品推荐
相关产品推荐

