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