0

使い方に応じてフェードイン/フェードアウトするスクロールバーを作りたいです。QScrollBarをサブクラス化して、希望の外観にしました。問題は、スクロールバーがコンテンツの横に配置されていることです。代わりに、コンテンツの上に配置するにはどうすればよいですか?

4

2 に答える 2

1

新しいQScrollbarを作成し、信号を介して元のQScrollbarに接続し、それを使用widget->setParentwidget->setGeometry()て上にペイントしました。

于 2012-09-09T23:50:22.150 に答える
0

私のより迅速な解決策はQScrollBarsQScrollArea作成したものを再ペアレント化し、それを新しいものに追加して、希望どおり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 に答える