0

我想制作一个根据使用情况淡入淡出的滚动条。我继承了 QScrollBar 并得到了我想要的外观。问题是滚动条放置在内容旁边。我该如何让它在内容之上?

4

2 回答 2

1

我创建了一个新的 QScrollbar,我通过信号连接到原始的,然后使用它widget->setParent,然后widget->setGeometry()将它绘制在顶部

于 2012-09-09T23:50:22.150 回答
0

我更快的解决方案是重新QScrollBars创建QScrollArea创建的对象并将其添加到新对象QLayout中以按您想要的方式定位它。

QScrollArea *scrollArea = new QScrollArea();

QScrollBar *scrollBar = scrollArea->horizontalScrollBar();
scrollBar->setParent(scrollArea);
scrollBar->setFixedHeight(20);//required for later

QVBoxLayout *scrollAreaLayout = new QVBoxLayout(scrollArea);
scrollAreaLayout->setContentsMargins(0, 0, 0, 10);//use whatever margins you want
scrollAreaLayout->addStretch(1);
scrollAreaLayout->addWidget(scrollBar);

这使基本功能正常工作,但QScrollArea仍然增加了滚动条所在的空间。要删除它,子类QProxyStyle和覆盖pixelMetric()

#include <QProxyStyle>

class StyleFixes : public QProxyStyle
{
public:
    int pixelMetric(PixelMetric metric, const QStyleOption *option = Q_NULLPTR, const QWidget *widget = Q_NULLPTR) const override
    {
        if(metric == PM_ScrollBarExtent)
        {
            return 0;
        }

        return QProxyStyle::pixelMetric(metric, option, widget);
    }
};

然后在 main.cpp 中应用它

QApplication::setStyle(new StyleFixes);

但是,这将删除滚动条上的箭头,因此您需要自己设置样式。

于 2021-08-16T05:53:23.083 回答