使い方に応じてフェードイン/フェードアウトするスクロールバーを作りたいです。QScrollBarをサブクラス化して、希望の外観にしました。問題は、スクロールバーがコンテンツの横に配置されていることです。代わりに、コンテンツの上に配置するにはどうすればよいですか?
質問する
144 次
2 に答える
1
新しいQScrollbarを作成し、信号を介して元の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 に答える