QMargins QAbstractScrollArea::viewportMargins()
QMargins QAbstractScrollArea::viewportMargins()
とは
QMargins QAbstractScrollArea::viewportMargins()
は、Qtの QAbstractScrollArea
クラスのメソッドです。このメソッドは、スクロール領域のビューポートの周囲に設定されたマージン(余白)の大きさを QMargins
オブジェクトとして返します。
QAbstractScrollArea
とは
QAbstractScrollArea
は、スクロール可能な領域を提供するウィジェットの基底クラスです。これは、ビューポートと呼ばれる中心のウィジェットを持ち、その中にコンテンツが表示され、必要に応じてスクロールバーが表示されます。QScrollArea
や QTableView
、QTreeView
など、多くのスクロール可能なウィジェットがこのクラスを継承しています。
QMargins
とは
QMargins
クラスは、長方形の4辺(左、上、右、下)のサイズを保持するクラスです。viewportMargins()
メソッドが返す QMargins
オブジェクトには、ビューポートの各辺にどれだけの余白が設定されているかが含まれています。
viewportMargins()
の役割
viewportMargins()
メソッドが返すマージンは、主に以下の目的で使用されます。
-
カスタムスクロールエリアの実装:
QAbstractScrollArea
を直接継承して独自のスクロールエリアを実装する場合、viewportMargins()
を使って現在のマージンを取得し、それに基づいてビューポートのレイアウトやコンテンツの描画位置を調整することができます。
例えば、QTableView
のようなウィジェットでは、カラムヘッダーや行ヘッダーがスクロールするコンテンツとは別に表示されます。これらのヘッダーは、QAbstractScrollArea
のビューポートの上下左右のマージンとして考慮され、そのスペースに描画されます。
setViewportMargins() の効果がない
よくあるエラー
QAbstractScrollArea
を直接継承して独自のスクロールエリアを作成したが、setViewportMargins()
を設定してもビューポートの表示が正しく変わらない。QTableView
やQTreeView
などのQtが提供する標準のビュークラスでsetViewportMargins()
を呼び出しても、見た目に変化がない、または期待通りのマージンが適用されない。
原因とトラブルシューティング
-
カスタムスクロールエリアでのレイアウトの欠如
QAbstractScrollArea
を継承してカスタムのスクロールエリアを作成した場合、setViewportMargins()
を設定しただけでは、そのマージン領域に何かを表示するためのレイアウトや描画ロジックが自動的に追加されるわけではありません。マージン領域は「空きスペース」として確保されるだけです。- 対策
- 手動でのウィジェット配置
QAbstractScrollArea
のresizeEvent()
をオーバーライドし、viewportMargins()
で取得したマージン情報に基づいて、マージン領域に配置したいウィジェット(例えば、カスタムのヘッダーウィジェットなど)の位置とサイズを手動で計算してmove()
やresize()
で設定する必要があります。 - viewport() の利用
ビューポートの親ウィジェット(QAbstractScrollArea
自身)に、マージン領域を含んだ全体のレイアウトを設定し、ビューポートをそのレイアウトの一部として配置する方法も考えられます。ただし、この場合、ビューポートのマージンとしてではなく、親ウィジェットのレイアウトのマージンとして扱われます。 - QScrollArea の検討
複雑なレイアウトが必要ない場合や、単純なウィジェットをスクロールさせたいだけであれば、QAbstractScrollArea
の代わりにQScrollArea
を使用することを検討してください。QScrollArea
は内部でウィジェットのスクロールを処理するため、setWidget()
で子ウィジェットを設定するだけで済み、マージンの複雑な処理は不要になることが多いです。
- 手動でのウィジェット配置
- 対策
-
標準ビュークラスの内部管理
QTableView
やQTreeView
など、Qtの多くの標準ビュークラスは、内部で自身のヘッダー(QHeaderView
)の配置を管理するためにviewportMargins
を使用しています。そのため、これらのクラスに対してsetViewportMargins()
を外部から呼び出しても、その設定が無視されるか、期待通りの効果が得られないことがあります。これはQtの設計上の挙動であり、バグではありません。- 対策
これらのクラスでヘッダーの位置やサイズを調整したい場合は、直接QHeaderView
のプロパティ(例:setMinimumSectionSize()
など)や、モデル/ビューアーキテクチャを通じてビューの表示を制御することを検討してください。
- 対策
スクロールバーとマージンの競合
setViewportMargins()
でマージンを設定すると、スクロールバーが表示されるべき領域がマージンによって隠れてしまう、またはスクロールバーの表示が不自然になる。
- スクロールバーのポリシー
QAbstractScrollArea
は、horizontalScrollBarPolicy
とverticalScrollBarPolicy
というプロパティを持っており、スクロールバーの表示ポリシーを制御します(例:Qt::ScrollBarAsNeeded
、Qt::ScrollBarAlwaysOn
、Qt::ScrollBarAlwaysOff
)。これらのポリシーとマージンの設定が競合すると、意図しない表示になることがあります。特にQt::ScrollBarAsNeeded
の場合、コンテンツのサイズとビューポートのサイズに基づいてスクロールバーの表示/非表示が自動的に切り替わるため、マージンの計算に影響を与える可能性があります。- 対策
- ポリシーの確認
スクロールバーの表示ポリシーが適切に設定されているかを確認します。必要に応じてQt::ScrollBarAlwaysOn
を試して、スクロールバーが常に表示されるように強制してみることで、マージンの影響を切り分けることができます。 - レイアウトの再計算
マージンやコンテンツのサイズが変更された場合、updateGeometry()
やviewport()->updateGeometry()
を呼び出して、レイアウトを再計算させる必要がある場合があります。
- ポリシーの確認
- 対策
- 描画された結果と
viewportMargins()
で取得した値が一致しない。 viewportMargins()
を呼び出すと、setViewportMargins()
で設定した値とは異なる値が返ってくる。
-
システムスタイルとテーマ
Qtのスタイルシステムやオペレーティングシステムのテーマによっては、ウィジェットのレンダリングに影響を与え、マージンが視覚的に期待通りに見えないことがあります。- 対策
スタイルシート (setStyleSheet()
) を使用して、明示的にパディングやマージンを設定し、スタイルシステムの影響をオーバーライドすることを検討してください。ただし、これはQtの標準的なマージン管理とは別のレイヤーでの話になります。
- 対策
-
デフォルトマージン
QAbstractScrollArea
のサブクラスによっては、デフォルトで何らかのマージンが設定されている場合があります。特に、Qtが提供するビュークラスは、内部で独自のロジックに基づいてマージンを計算・設定することがあります。- 対策
setViewportMargins(0, 0, 0, 0)
を呼び出して、一度マージンをリセットし、その後で目的の値を設定してみることで、初期値の影響を排除できる場合があります。
- 対策
例1: カスタムのスクロールエリアと固定ヘッダー
この例では、MyScrollArea
というカスタム QAbstractScrollArea
を作成し、その上部に固定されたヘッダーウィジェット(QLabel
)を配置します。
my_scroll_area.h
#ifndef MY_SCROLL_AREA_H
#define MY_SCROLL_AREA_H
#include <QAbstractScrollArea>
#include <QLabel>
#include <QMargins>
#include <QResizeEvent>
#include <QVBoxLayout> // レイアウト管理にQVBoxLayoutを使用
class MyScrollArea : public QAbstractScrollArea
{
Q_OBJECT
public:
explicit MyScrollArea(QWidget *parent = nullptr);
// ビューポートに表示するコンテンツを設定するメソッド
void setContentWidget(QWidget *widget);
protected:
// ビューポートのサイズ変更イベントを処理
void resizeEvent(QResizeEvent *event) override;
// スクロールバーの値の変更を処理
void scrollContentsBy(int dx, int dy) override;
private:
QLabel *topHeaderLabel; // 上部に表示する固定ヘッダー
QWidget *contentWidget; // スクロールされるコンテンツ
};
#endif // MY_SCROLL_AREA_H
my_scroll_area.cpp
#include "my_scroll_area.h"
#include <QDebug> // デバッグ出力用
MyScrollArea::MyScrollArea(QWidget *parent)
: QAbstractScrollArea(parent),
contentWidget(nullptr)
{
// ヘッダーウィジェットの作成
topHeaderLabel = new QLabel("Custom Header", this);
topHeaderLabel->setStyleSheet("background-color: lightblue; border: 1px solid blue;");
topHeaderLabel->setAlignment(Qt::AlignCenter);
topHeaderLabel->setFixedHeight(30); // ヘッダーの高さを固定
// ビューポートのマージンを設定
// 上部にヘッダーの高さ分のマージンを設ける
setViewportMargins(0, topHeaderLabel->height(), 0, 0);
// スクロールバーのポリシーを設定(必要に応じて表示)
setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
}
void MyScrollArea::setContentWidget(QWidget *widget)
{
if (contentWidget) {
contentWidget->setParent(nullptr); // 既存のコンテンツを親から解除
}
contentWidget = widget;
// ビューポートの子ウィジェットとして設定
// QAbstractScrollArea::setViewport() は QScrollArea::setWidget() と異なり、
// ビューポートの親ウィジェットがコンテンツを直接管理するわけではないことに注意
// ここでは、contentWidgetをviewport()の子として設定
if (contentWidget) {
contentWidget->setParent(viewport());
// contentWidgetのサイズポリシーを適切に設定
contentWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
// コンテンツの最小サイズを反映させる
viewport()->setMinimumSize(contentWidget->sizeHint());
// レイアウトを更新
updateGeometry();
}
}
void MyScrollArea::resizeEvent(QResizeEvent *event)
{
QAbstractScrollArea::resizeEvent(event); // 親クラスのイベントを呼び出す
// ビューポートのジオメトリを取得
QRect vpRect = viewport()->geometry();
// ヘッダーをビューポートの上のマージン領域に配置
topHeaderLabel->setGeometry(vpRect.left(), 0, vpRect.width(), topHeaderLabel->height());
if (contentWidget) {
// コンテンツウィジェットのサイズと位置を更新
// マージンを考慮したビューポートのクライアント領域
QRect contentRect = viewport()->rect();
contentWidget->resize(contentRect.size());
// スクロール位置に基づいてコンテンツウィジェットを移動
int hOffset = horizontalScrollBar()->value();
int vOffset = verticalScrollBar()->value();
contentWidget->move(-hOffset, -vOffset); // スクロールバーの値の分だけ逆方向に移動
}
// スクロールバーの範囲を更新
if (contentWidget) {
QSize contentSize = contentWidget->sizeHint();
QSize viewportSize = viewport()->size();
horizontalScrollBar()->setRange(0, qMax(0, contentSize.width() - viewportSize.width()));
verticalScrollBar()->setRange(0, qMax(0, contentSize.height() - viewportSize.height()));
}
}
void MyScrollArea::scrollContentsBy(int dx, int dy)
{
// スクロールバーの値に基づいてコンテンツを移動
if (contentWidget) {
contentWidget->move(contentWidget->x() + dx, contentWidget->y() + dy);
}
}
main.cpp
#include <QApplication>
#include <QMainWindow>
#include <QPlainTextEdit> // スクロールさせるコンテンツとして使用
#include <QVBoxLayout>
#include "my_scroll_area.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
window.setWindowTitle("Custom Scroll Area with Header");
window.setGeometry(100, 100, 600, 400);
MyScrollArea *scrollArea = new MyScrollArea();
// スクロールさせる長いテキストコンテンツを作成
QPlainTextEdit *plainTextEdit = new QPlainTextEdit();
plainTextEdit->setPlainText(
"これは長いテキストコンテンツです。\n"
"スクロールエリアの動作を確認するために、たくさんの行と列を持っています。\n"
"................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................QAbstractScrollArea::viewportMargins() は、Qtのアプリケーションにおいて、**QAbstractScrollArea クラスとそのサブクラス(QScrollArea など)のビューポート(実際に内容が表示される領域)の周りの余白**を管理するための重要な機能です。この余白は、スクロールされるコンテンツ自体とは別に、固定されたウィジェット(例:ヘッダー)を配置するために利用されます。
以下に、この機能に関連する代表的なコード例と、それぞれのポイントを日本語で説明します。
---
### 例1: `QAbstractScrollArea` を継承したカスタムウィジェットに固定ヘッダーを配置する
この例は、`QAbstractScrollArea` を継承して、ビューポートの上部に固定されたヘッダーを表示するカスタムスクロールエリアを作成する方法を示します。
**ポイント:**
* `QAbstractScrollArea` を直接継承します。`QScrollArea` とは異なり、ビューポート内のコンテンツの配置やスクロールバーの制御を開発者自身が行う必要があります。
* `setViewportMargins()` を使用して、ヘッダー分のマージンを上部に設定します。
* `resizeEvent()` をオーバーライドして、ウィジェットのサイズ変更時にヘッダーとビューポート内のコンテンツの位置とサイズを再計算・調整します。
* `scrollContentsBy()` をオーバーライドして、スクロールバーが動いたときにビューポート内のコンテンツを移動させます。
**コード:**
**`mycustomscrollarea.h`**
```cpp
#ifndef MYCUSTOMSCROLLAREA_H
#define MYCUSTOMSCROLLAREA_H
#include <QAbstractScrollArea>
#include <QLabel> // 固定ヘッダーとして使用
#include <QTextEdit> // スクロールするコンテンツとして使用
#include <QResizeEvent>
#include <QScrollBar>
class MyCustomScrollArea : public QAbstractScrollArea
{
Q_OBJECT
public:
explicit MyCustomScrollArea(QWidget *parent = nullptr);
~MyCustomScrollArea();
// スクロールされるコンテンツを設定するメソッド
void setContentWidget(QWidget *widget);
protected:
// ウィジェットのサイズ変更イベント
void resizeEvent(QResizeEvent *event) override;
// スクロールバーの値が変更されたときにコンテンツをスクロール
void scrollContentsBy(int dx, int dy) override;
private:
QLabel *m_headerLabel; // ビューポート上部に固定表示するヘッダー
QWidget *m_contentWidget; // スクロールされる実際のコンテンツ
};
#endif // MYCUSTOMSCROLLAREA_H
mycustomscrollarea.cpp
#include "mycustomscrollarea.h"
#include <QDebug>
#include <QApplication> // アプリケーション実行用
MyCustomScrollArea::MyCustomScrollArea(QWidget *parent)
: QAbstractScrollArea(parent),
m_contentWidget(nullptr)
{
// 1. ヘッダーウィジェットの初期化とスタイル設定
m_headerLabel = new QLabel("これはカスタムヘッダーです", this);
m_headerLabel->setStyleSheet("background-color: #e0e0ff; border-bottom: 1px solid #a0a0ff; padding: 5px;");
m_headerLabel->setAlignment(Qt::AlignCenter);
m_headerLabel->setFixedHeight(40); // ヘッダーの高さを固定
// 2. ビューポートのマージンを設定
// 上部にヘッダーの高さ分、下部に少し余白を設ける
// setViewportMargins(left, top, right, bottom)
setViewportMargins(0, m_headerLabel->height(), 0, 10); // 下に10pxの余白を追加
// 3. スクロールバーのポリシー設定
setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
// 4. スクロールバーの値が変更されたときに、自身を更新するように接続
// これにより、scrollContentsBy() が呼び出され、コンテンツが移動します。
connect(horizontalScrollBar(), &QScrollBar::valueChanged, this, [this]{
if (m_contentWidget) {
scrollContentsBy(0, 0); // スクロールバーの値を反映させるために呼び出し
}
});
connect(verticalScrollBar(), &QScrollBar::valueChanged, this, [this]{
if (m_contentWidget) {
scrollContentsBy(0, 0); // スクロールバーの値を反映させるために呼び出し
}
});
}
MyCustomScrollArea::~MyCustomScrollArea()
{
// m_headerLabel と m_contentWidget は親に設定されているので、
// 親ウィジェットが破棄されるときに自動的に破棄されます。
// 明示的なdeleteは通常不要ですが、親設定がない場合は必要です。
}
void MyCustomScrollArea::setContentWidget(QWidget *widget)
{
if (m_contentWidget) {
m_contentWidget->setParent(nullptr); // 既存のコンテンツの親を解除
}
m_contentWidget = widget;
if (m_contentWidget) {
m_contentWidget->setParent(viewport()); // ビューポートの子として設定
m_contentWidget->move(0, 0); // 初期位置
m_contentWidget->show();
viewport()->setMinimumSize(m_contentWidget->sizeHint()); // ビューポートの最小サイズをコンテンツに合わせる
updateGeometry(); // レイアウト更新を促す
}
}
void MyCustomScrollArea::resizeEvent(QResizeEvent *event)
{
// QAbstractScrollAreaの親クラスのresizeEventを呼び出す
// これにより、ビューポート自体のサイズが更新されます
QAbstractScrollArea::resizeEvent(event);
// ビューポートの現在のジオメトリを取得
QRect vpRect = viewport()->geometry();
// ヘッダーウィジェットをビューポートの上部マージン領域に配置
m_headerLabel->setGeometry(vpRect.left(), 0, vpRect.width(), m_headerLabel->height());
if (m_contentWidget) {
// コンテンツウィジェットのサイズをビューポートのサイズに合わせる(もしコンテンツが小さい場合)
// 大きすぎる場合はスクロールバーが対応する
m_contentWidget->resize(qMax(vpRect.width(), m_contentWidget->sizeHint().width()),
qMax(vpRect.height(), m_contentWidget->sizeHint().height()));
// スクロールバーの範囲を更新
horizontalScrollBar()->setRange(0, qMax(0, m_contentWidget->width() - vpRect.width()));
verticalScrollBar()->setRange(0, qMax(0, m_contentWidget->height() - vpRect.height()));
}
// スクロール位置に基づいてコンテンツウィジェットを移動
scrollContentsBy(0, 0); // 値が変更されていなくても、現在のスクロール位置を反映させる
}
void MyCustomScrollArea::scrollContentsBy(int dx, int dy)
{
if (m_contentWidget) {
// スクロールバーの現在の値を取得
int hOffset = horizontalScrollBar()->value();
int vOffset = verticalScrollBar()->value();
// コンテンツウィジェットをスクロール位置の逆方向に移動
// これにより、ビューポート内の見える部分が適切に表示される
m_contentWidget->move(-hOffset, -vOffset);
}
}
#include <QApplication>
#include <QMainWindow>
#include <QTextEdit>
#include "mycustomscrollarea.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
window.setWindowTitle("QAbstractScrollArea Viewport Margins Example");
window.setGeometry(100, 100, 600, 400);
MyCustomScrollArea *customScrollArea = new MyCustomScrollArea(&window);
// 長いテキストを持つQTextEditをコンテンツとして設定
QTextEdit *content = new QTextEdit();
content->setPlainText(
"これはスクロール可能なコンテンツの長いテキストです。\n"
"たくさんの行があります。\n"
"................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................--------------------------------
QMargins QAbstractScrollArea::viewportMargins()
が適さない、またはより柔軟なレイアウトが必要な場合に考えられる代替手段は以下の通りです。
QScrollArea と QWidget の組み合わせ
利点
- 保守性
コードがシンプルで理解しやすいため、メンテナンスが容易です。 - Qtのレイアウトマネージャーの活用
QVBoxLayout
やQHBoxLayout
などの強力なレイアウトシステムを使って、複雑なUIを簡単に構築できます。固定要素とスクロール要素のサイズ変更や配置が自動的に処理されます。 - 簡単
QScrollArea::setWidget()
を使うだけで、基本的なスクロール機能が実現できます。
欠点
- カスタムヘッダーの配置が難しい場合がある
ヘッダーがスクロールエリアの端に「張り付く」ように見せたい場合、QScrollArea
の親ウィジェットのレイアウトを工夫する必要があります。 - 固定要素がスクロールしない
この方法では、固定要素(ヘッダーなど)はQScrollArea
自体の外部、またはQScrollArea
のsetWidget()
で設定されたウィジェットの内部に、スクロールとは関係なく固定されます。つまり、QScrollArea
のスクロールバーが動いても、固定要素は動きません。
コード例 (概念)
// main.cpp またはメインウィンドウのコンストラクタ内で
#include <QApplication>
#include <QMainWindow>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QLabel>
#include <QTextEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
window.setWindowTitle("QScrollArea Alternative");
QWidget *centralWidget = new QWidget(&window);
QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);
mainLayout->setContentsMargins(0, 0, 0, 0); // 中央ウィジェットのマージンを0に
// 1. 固定ヘッダーの配置
QLabel *header = new QLabel("固定ヘッダー", centralWidget);
header->setFixedHeight(40);
header->setStyleSheet("background-color: lightgray; border-bottom: 1px solid darkgray;");
header->setAlignment(Qt::AlignCenter);
mainLayout->addWidget(header);
// 2. スクロールエリアの設定
QScrollArea *scrollArea = new QScrollArea(centralWidget);
scrollArea->setWidgetResizable(true); // スクロールエリアがリサイズされたときに内部ウィジェットもリサイズ
// 3. スクロールさせるコンテンツを作成
QTextEdit *content = new QTextEdit();
content->setPlainText("これはスクロールされるコンテンツです。\n"
"たくさんの行と長い行を持つテキストです。\n"
"これにより、スクロールバーが表示されるはずです。\n"
".................................................\n"
"(以下、大量のテキストが続く)");
content->setReadOnly(true); // 編集不可にする
// 4. スクロールエリアにコンテンツを設定
scrollArea->setWidget(content); // QScrollAreaは一つのウィジェットのみを管理
// 5. メインレイアウトにスクロールエリアを追加
mainLayout->addWidget(scrollArea);
window.setCentralWidget(centralWidget);
window.resize(400, 300);
window.show();
return a.exec();
}
QGraphicsView / QGraphicsScene を使用する
利点
- インタラクション
アイテムごとのイベント処理やインタラクションが容易です。 - 効率的な描画
大量のアイテムがあっても、QtのGraphics View Frameworkが効率的に描画を処理します。 - 高い柔軟性
あらゆる種類のグラフィカル要素を自由に配置・描画できます。
欠点
- UI要素との統合
QPushButton
のような標準のQtウィジェットを直接QGraphicsScene
に追加するには、QGraphicsProxyWidget
を使用する必要があります。 - 複雑性
学習コストが高く、単純なUIにはオーバーキルになる可能性があります。
コード例 (概念)
// main.cpp またはメインウィンドウのコンストラクタ内で
#include <QApplication>
#include <QMainWindow>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsTextItem>
#include <QGraphicsRectItem>
#include <QVBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
window.setWindowTitle("QGraphicsView Alternative");
QGraphicsScene *scene = new QGraphicsScene();
QGraphicsView *view = new QGraphicsView(scene, &window);
view->setRenderHint(QPainter::Antialiasing); // アンチエイリアシング有効化
// 1. スクロールされるコンテンツ(テキスト)
QGraphicsTextItem *longText = new QGraphicsTextItem();
longText->setHtml("<h1>これはスクロール可能なテキストコンテンツです</h1><p>たくさんの行と長い行を持つテキストです。<br>これにより、スクロールバーが表示されるはずです。<br>.................................................<br>(以下、大量のテキストが続く)</p>");
longText->setTextWidth(400); // テキストの幅を固定
scene->addItem(longText);
// 2. 固定ヘッダー(QGraphicsRectItem と QGraphicsTextItem の組み合わせ)
QGraphicsRectItem *headerBackground = new QGraphicsRectItem(0, 0, 400, 40); // シーン座標で作成
headerBackground->setBrush(QBrush(QColor("#e0e0ff")));
headerBackground->setZValue(100); // 手前に表示
scene->addItem(headerBackground);
QGraphicsTextItem *headerText = new QGraphicsTextItem("固定ヘッダー", headerBackground);
headerText->setDefaultTextColor(Qt::blue);
headerText->setFont(QFont("Arial", 12, QFont::Bold));
headerText->setPos(10, 10); // ヘッダー背景に対する相対位置
headerText->setZValue(101); // ヘッダー背景よりも手前に表示
// ヘッダーをビューポートの上部に固定する(スクロールしないようにする)
// QGraphicsViewのスクロールバーはシーンの範囲を基準に動くため、
// 固定したいアイテムはビューポートの矩形に合わせて位置を調整する必要があります。
// これはresizeEventやscrollContentsBy()に似たロジックをView側で実装するか、
// QGraphicsViewのsetViewportUpdateMode()とsetSceneRect()を工夫する必要があります。
// 例: headerBackground->setFlag(QGraphicsItem::ItemIgnoresTransformations);
// これを設定すると、アイテムはビューの変換(スクロールやズーム)の影響を受けません。
headerBackground->setFlag(QGraphicsItem::ItemIgnoresTransformations); // これが最も重要!
window.setCentralWidget(view);
window.resize(400, 300);
window.show();
return a.exec();
}
カスタムペインティングとスクロールバーの手動制御
利点
- 軽量
複雑なフレームワークのオーバーヘッドがありません。 - 完全な制御
描画とスクロールのロジックを完全にカスタマイズできます。
欠点
- 既存ウィジェットの描画が難しい
QTextEdit
のような複雑なウィジェットをこの方法でスクロールさせるのは非常に困難です。主にカスタムグラフィックスを描画する場合に適しています。 - 実装が複雑
描画、スクロールバーの範囲設定、イベント処理などをすべて手動で行う必要があり、非常に手間がかかります。
// これは非常に複雑になるため、概念のみを示す
#include <QWidget>
#include <QPainter>
#include <QScrollBar>
#include <QVBoxLayout>
class MyCustomPaintedScrollArea : public QWidget
{
Q_OBJECT
public:
explicit MyCustomPaintedScrollArea(QWidget *parent = nullptr) : QWidget(parent)
{
// 垂直スクロールバーと水平スクロールバーをインスタンス化
m_vScrollBar = new QScrollBar(Qt::Vertical, this);
m_hScrollBar = new QScrollBar(Qt::Horizontal, this);
// レイアウトにスクロールバーと描画領域を配置
QVBoxLayout *mainLayout = new QVBoxLayout(this);
QHBoxLayout *contentLayout = new QHBoxLayout();
contentLayout->addWidget(this); // 自身(描画領域)を配置
contentLayout->addWidget(m_vScrollBar);
mainLayout->addLayout(contentLayout);
mainLayout->addWidget(m_hScrollBar);
// スクロールバーの値変更シグナルと描画更新スロットを接続
connect(m_vScrollBar, &QScrollBar::valueChanged, this, [this](int value){
m_vOffset = value;
update(); // 再描画
});
connect(m_hScrollBar, &QScrollBar::valueChanged, this, [this](int value){
m_hOffset = value;
update(); // 再描画
});
// コンテンツの総サイズを設定するロジックが必要
// m_vScrollBar->setRange(0, totalContentHeight - visibleHeight);
}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
// 固定ヘッダーを描画
painter.fillRect(0, 0, width(), 40, Qt::blue);
painter.drawText(QRect(0, 0, width(), 40), Qt::AlignCenter, "カスタム描画ヘッダー");
// スクロールされるコンテンツを描画
// m_hOffset と m_vOffset を使って描画位置を調整
// painter.drawText(x - m_hOffset, y - m_vOffset, "コンテンツ");
// ... ここでコンテンツを描画 ...
}
private:
QScrollBar *m_vScrollBar;
QScrollBar *m_hScrollBar;
int m_hOffset = 0; // 水平スクロールオフセット
int m_vOffset = 0; // 垂直スクロールオフセット
};
- Qtのウィジェットシステムを避け、ピクセル単位で完全に描画を制御したい場合
カスタムペインティングとスクロールバーの手動制御ですが、これは最後の手段と考えるべきです。 - 高度なカスタム描画、ゲーム、または非常に多くのグラフィック要素
QGraphicsView
/QGraphicsScene
が適しています。QGraphicsItem::ItemIgnoresTransformations
フラグを使うことで、スクロールに追従しない固定要素を簡単に作成できます。 - 最も一般的なシナリオ(固定ヘッダーとスクロールするウィジェット)
QScrollArea
とQWidget
の組み合わせが最も簡単で推奨されます。ヘッダーなどの固定要素はQScrollArea
の外に配置し、QScrollArea
のsetWidget()
にスクロールさせたいコンテンツ全体を設定します。