如何将水平布局中的垂直QProgressBar宽度缩小至5px左右?
解决Qt垂直QProgressBar无法缩小到17px以下的问题
我之前也踩过这个坑!Qt的垂直QProgressBar在布局里确实有内置的尺寸限制,光靠Qt Designer里的最小尺寸设置和样式表经常搞不定,下面给你几个亲测有效的解决思路:
子类化重写尺寸提示方法
Qt控件的布局尺寸会优先参考sizeHint()和minimumSizeHint()返回的值,垂直进度条默认的这两个方法会把宽度限制在一个最小值(就是你碰到的17px左右)。我们可以子类化QProgressBar,强制返回我们想要的宽度:class NarrowProgressBar : public QProgressBar { Q_OBJECT public: explicit NarrowProgressBar(QWidget *parent = nullptr) : QProgressBar(parent) { setOrientation(Qt::Vertical); } QSize sizeHint() const override { // 第一个参数是宽度,设为5px,高度沿用默认值 return QSize(5, QProgressBar::sizeHint().height()); } QSize minimumSizeHint() const override { return QSize(5, QProgressBar::minimumSizeHint().height()); } };写完后在Qt Designer里右键进度条,选择「提升为...」,把这个自定义类加进去替换原生控件就行。如果用PyQt/PySide,代码逻辑是一样的:
from PyQt5.QtWidgets import QProgressBar from PyQt5.QtCore import Qt class NarrowProgressBar(QProgressBar): def __init__(self, parent=None): super().__init__(parent) self.setOrientation(Qt.Vertical) def sizeHint(self): return QSize(5, super().sizeHint().height()) def minimumSizeHint(self): return QSize(5, super().minimumSizeHint().height())配合样式表清除多余空间
原生进度条默认有边框和内边距,即使改了宽度,这些额外元素也会占空间,所以要在样式表里把它们去掉:QProgressBar { width: 5px; border: none; padding: 0px; background-color: #f0f0f0; /* 可选,设置背景色 */ } QProgressBar::chunk { width: 100%; /* 垂直进度条的进度块要占满宽度 */ background-color: #2ecc71; /* 进度颜色 */ }调整布局的拉伸因子
在水平布局里,把两个QTextEdit的拉伸因子设为1(让它们平分剩余空间),把进度条的拉伸因子设为0(不让它占用额外空间)。同时把进度条的sizePolicy水平策略设为Fixed,确保布局不会强制放大它。
这三个步骤结合起来,就能轻松得到5px宽的垂直进度条了,亲测有效!
内容的提问来源于stack exchange,提问作者SixDegrees
相关产品推荐
相关产品推荐

