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

如何将水平布局中的垂直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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:29