このページでは

QSplitter Class

QSplitter クラスは、スプリッターウィジェットを実装しています。詳細...

ヘッダー: #include <QSplitter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
継承元: QFrame

プロパティ

パブリック関数

QSplitter(QWidget *parent = nullptr)
QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
virtual ~QSplitter()
void addWidget(QWidget *widget)
bool childrenCollapsible() const
int count() const
void getRange(int index, int *min, int *max) const
QSplitterHandle *handle(int index) const
int handleWidth() const
int indexOf(QWidget *widget) const
void insertWidget(int index, QWidget *widget)
bool isCollapsible(int index) const
bool opaqueResize() const
Qt::Orientation orientation() const
void refresh()
QWidget *replaceWidget(int index, QWidget *widget)
bool restoreState(const QByteArray &state)
QByteArray saveState() const
void setChildrenCollapsible(bool)
void setCollapsible(int index, bool collapse)
void setHandleWidth(int)
void setOpaqueResize(bool opaque = true)
void setOrientation(Qt::Orientation)
void setSizes(const QList<int> &list)
void setStretchFactor(int index, int stretch)
QList<int> sizes() const
QWidget *widget(int index) const

再実装されたパブリック関数

virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

シグナル

void splitterMoved(int pos, int index)

保護された関数

int closestLegalPosition(int pos, int index)
virtual QSplitterHandle *createHandle()
void moveSplitter(int pos, int index)
void setRubberBand(int pos)

再実装されたプロテクトされた関数

virtual void changeEvent(QEvent *ev) override
virtual void childEvent(QChildEvent *c) override
virtual bool event(QEvent *e) override
virtual void resizeEvent(QResizeEvent *) override

詳細な説明

スプリッターを使用すると、ユーザーは子ウィジェット間の境界線をドラッグして、子ウィジェットのサイズを制御できます。1つのスプリッターで、任意の数のウィジェットを制御できます。QSplitterの一般的な使用法は、複数のウィジェットを作成し、insertWidget() またはaddWidget() を使用してそれらを追加することです。

次の例では、QListView 、QTreeView 、およびQTextEdit を2つのスプリッターハンドルとともに並べて表示します。

QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);

insertWidget() またはaddWidget() が呼び出された時点で、ウィジェットがすでに QSplitter 内に存在している場合、そのウィジェットは新しい位置に移動します。これにより、後でスプリッター内のウィジェットの順序を変更することができます。indexOf()、widget()、およびcount() を使用すると、スプリッター内のウィジェットにアクセスできます。

デフォルトの QSplitter は、子ウィジェットを水平方向(並列)に配置しますが、setOrientation (Qt::Vertical )を使用することで、子ウィジェットを垂直方向に配置することができます。

デフォルトでは、すべてのウィジェットは、minimumSizeHint() (またはminimumSize()) とmaximumSize() の範囲内で、ユーザーが望む大きさや小ささに調整できます。

QSplitterはデフォルトで子ウィジェットのサイズを動的に変更します。リサイズ操作の終了時にのみQSplitterに子ウィジェットのサイズを変更させたい場合は、setOpaqueResize(false)を呼び出してください。

ウィジェット間の初期サイズ配分は、初期サイズにストレッチ係数を乗算することで決定されます。また、setSizes() を使用して、すべてのウィジェットのサイズを設定することもできます。sizes() 関数は、ユーザーが設定したサイズを返します。あるいは、saveState() およびrestoreState() をそれぞれ使用して、QByteArray からウィジェットのサイズを保存・復元することもできます。

子ウィジェットに対してhide() を実行すると、そのスペースは他の子ウィジェットに再配分されます。再度show() を実行すると、元の状態が復元されます。

注: QSplitterへのQLayout の追加は サポートされていません(setLayout()による場合も、QSplitterをQLayout の子にする場合も同様です)。代わりにaddWidget()を使用してください(上記の例を参照)。

セキュリティに関する考慮事項

restoreState() 関数は、スプリッターの子要素のサイズと向きを記述する、バージョン管理されたバイナリブロブをデシリアライズします。フォーマットのマジックナンバーとバージョンは検証されますが、外側の構造体が受け入れられた後は、個々のフィールドに対してそれ以外の妥当性チェックは行われません。

restoreState() には、以前にsaveState() によって生成され、かつ同じバージョンまたは互換性のあるバージョンのアプリケーション(通常はQSettings を通じて)によって永続化されたQByteArray のみを渡してください。ネットワークからダウンロードしたファイル、同期または共有された設定ファイル、あるいは侵害されている可能性のある別のアプリケーションから提供されたデータなど、出所が不明または信頼できないデータを使用してrestoreState() を呼び出さないでください。

関連項目:QSplitterHandle 、QHBoxLayout 、QVBoxLayout 、およびQTabWidgetも参照してください 。

プロパティのドキュメント

childrenCollapsible : bool

このプロパティは、子ウィジェットがユーザーによってサイズ0まで縮小できるかどうかを指定します。

デフォルトでは、子ウィジェットは折りたたみ可能です。setCollapsible() を使用することで、個々の子ウィジェットの折りたたみ機能を有効または無効にすることができます。

アクセス関数:

bool childrenCollapsible() const
void setChildrenCollapsible(bool)

setCollapsible()も参照してください 。

handleWidth : int

このプロパティには、スプリッターのハンドルの幅が格納されます

デフォルトでは、このプロパティの値は、ユーザーのプラットフォームやスタイル設定によって異なります。

handleWidth を 1 または 0 に設定すると、実際のドラッグ領域が拡大し、それぞれのウィジェットと数ピクセル重なるようになります。

アクセス関数:

int handleWidth() const
void setHandleWidth(int)

opaqueResize : bool

スプリッターをインタラクティブに移動している間にウィジェットのサイズが動的に(不透明に)変更された場合、true を返します。それ以外の場合は、false を返します。

デフォルトのサイズ変更の挙動はスタイルに依存します(SH_Splitter_OpaqueResize スタイルヒントによって決定されます)。ただし、setOpaqueResize() を呼び出すことでこれを上書きすることができます。

アクセス関数:

bool opaqueResize() const
void setOpaqueResize(bool opaque = true)

QStyle::StyleHintも参照してください 。

orientation : Qt::Orientation

このプロパティは、スプリッターの向きを指定します

デフォルトでは、配置方向は水平です(つまり、ウィジェットは並列に配置されます)。設定可能な配置方向は、Qt::Horizontal およびQt::Vertical です。

アクセス関数:

Qt::Orientation orientation() const
void setOrientation(Qt::Orientation)

関連項目: QSplitterHandle::orientation()。

メンバ関数のドキュメント

[explicit] QSplitter::QSplitter(QWidget *parent = nullptr)

parent 引数をQFrame コンストラクタに渡して、水平スプリッターを作成します。

setOrientation()も参照してください 。

[explicit] QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)

指定されたorientation およびparent を使用して、スプリッターを構築します。

setOrientation()も参照してください 。

[virtual noexcept] QSplitter::~QSplitter()

スプリッターを破棄します。すべての子要素が削除されます。

void QSplitter::addWidget(QWidget *widget)

指定されたwidget を、他のすべての項目の後に、スプリッターのレイアウトに追加します。

widget がすでにスプリッター内にある場合は、新しい位置に移動されます。

注:スプリッターは ウィジェットの所有権を取得します。

insertWidget()、widget()、indexOf()も参照してください 。

[override virtual protected] void QSplitter::changeEvent(QEvent *ev)

QFrame::changeEvent(QEvent *ev) を再実装します。

[override virtual protected] void QSplitter::childEvent(QChildEvent *c)

QObject::childEvent(QChildEvent *event) を再実装します。

c で指定された子ウィジェットが挿入または削除されたことをスプリッターに通知します。

このメソッドは、スプリッターを親としてウィジェットが作成されたものの、insertWidget() やaddWidget() によって明示的に追加されていない場合に対処するためにも使用されます。これは互換性のためのものであり、新しいコードでウィジェットをスプリッターに配置するための推奨される方法ではありません。新しいコードでは、insertWidget() またはaddWidget() を使用してください。

addWidget() およびinsertWidget()も参照してください 。

[protected] int QSplitter::closestLegalPosition(int pos, int index)

index にあるウィジェットの、pos に最も近い有効な位置を返します。

アラビア語やヘブライ語などの右から左へ書かれる言語の場合、水平スプリッターのレイアウトは逆になります。その場合、位置はウィジェットの右端から測定されます。

getRange()も参照してください 。

int QSplitter::count() const

スプリッターのレイアウトに含まれるウィジェットの数を返します。

widget() およびhandle()も参照してください 。

[virtual protected] QSplitterHandle *QSplitter::createHandle()

このスプリッターの子ウィジェットとして、新しいスプリッターハンドルを返します。この関数は、カスタムハンドルをサポートするために、サブクラスで再実装することができます。

handle() およびindexOf()も参照してください 。

[override virtual protected] bool QSplitter::event(QEvent *e)

QFrame::event(QEvent *e) の再実装です。

void QSplitter::getRange(int index, int *min, int *max) const

min およびmax が 0 でない場合、*min および *max にあるindex のスプリッターの有効範囲を返します。

QSplitterHandle *QSplitter::handle(int index) const

指定されたindex において、スプリッターのレイアウト内の項目の左側(または上側)にあるハンドルを返します。該当する項目がない場合は、nullptr を返します。インデックス0のハンドルは常に非表示になります。

アラビア語やヘブライ語などの右から左へ書く言語の場合、水平スプリッターのレイアウトは逆になります。index では、ハンドルはウィジェットの右側に配置されます。

count()、widget()、indexOf()、createHandle()、およびsetHandleWidth()も参照してください 。

int QSplitter::indexOf(QWidget *widget) const

指定されたwidget がスプリッターのレイアウト内で占めるインデックスを返します。widget が見つからない場合は-1を返します。これはハンドルに対しても機能します。

ハンドルの番号は0から始まります。ハンドルの数は子ウィジェットの数と同じですが、位置0のハンドルは常に非表示になっています。

count() およびwidget()も参照してください 。

void QSplitter::insertWidget(int index, QWidget *widget)

指定されたwidget を、指定されたindex の位置にスプリッターのレイアウトに挿入します。

widget がすでにスプリッター内にある場合は、新しい位置に移動されます。

index が無効なインデックスの場合、ウィジェットは末尾に挿入されます。

注:スプリッターは ウィジェットの所有権を取得します。

関連項目: addWidget()、indexOf()、およびwidget()。

bool QSplitter::isCollapsible(int index) const

index にあるウィジェットが折りたたみ可能な場合は `true ` を返し、そうでない場合は `false` を返します。

[override virtual] QSize QSplitter::minimumSizeHint() const

プロパティ「QWidget::minimumSizeHint 」のアクセス関数を再実装します。

[protected] void QSplitter::moveSplitter(int pos, int index)

index にあるスプリッターハンドルの左端または上端を、pos の位置(ウィジェットの左端または上端からの距離)に可能な限り近づけます。

アラビア語やヘブライ語などの右から左へ書く言語の場合、水平スプリッターのレイアウトは逆になります。この場合、pos はウィジェットの右端からの距離となります。

splitterMoved()、closestLegalPosition()、およびgetRange()も参照してください 。

void QSplitter::refresh()

スプリッタの状態を更新します。この関数を呼び出す必要はありません。

QWidget *QSplitter::replaceWidget(int index, QWidget *widget)

指定されたindex にあるスプリッターのレイアウト内のウィジェットを、widget に置き換えます。

index が有効であり、かつwidget がまだスプリッターの子要素でない場合、置き換えられたばかりのウィジェットを返します。それ以外の場合はnullを返し、置き換えや追加は行われません。

新しく挿入されたウィジェットのジオメトリは、置き換えられたウィジェットと同じになります。また、その表示状態や折りたたみ状態も継承されます。

注:スプリッターは `widget ` の所有権を取得し、置換されたウィジェットの親を null に設定します。

注: widget はreparented をスプリッター内に取り込むため 、そのgeometry はすぐには設定されず、widget が適切なイベントを受信した後にのみ設定されます。

insertWidget() およびindexOf()も参照してください 。

[override virtual protected] void QSplitter::resizeEvent(QResizeEvent *)

QWidget::resizeEvent(QResizeEvent *event) を再実装します。

bool QSplitter::restoreState(const QByteArray &state)

スプリッターのレイアウトを、指定されたstate の状態に復元します。状態が復元された場合はtrue を返し、そうでない場合はfalse を返します。

通常、これはQSettings と組み合わせて、過去のセッションからのサイズを復元するために使用されます。以下に例を示します。

スプリッターの状態を復元する:

QSettings settings;
splitter->restoreState(settings.value("splitterSizes").toByteArray());

スプリッターのレイアウトの復元に失敗する場合は、渡されたバイト配列内のデータが無効であるか、古くなっていることが原因である可能性があります。

saveState()も参照してください 。

QByteArray QSplitter::saveState() const

スプリッターのレイアウトの状態を保存します。

通常、これはQSettings と組み合わせて使用され、次回のセッションのためにサイズを記憶しておくために使われます。データの一部としてバージョン番号が保存されます。以下に例を示します:

QSettings settings;
settings.setValue("splitterSizes", splitter->saveState());

restoreState()も参照してください 。

void QSplitter::setCollapsible(int index, bool collapse)

index にある子ウィジェットを、collapse に折りたたみ可能にするかどうかを設定します。

デフォルトでは、子ウィジェットは折りたたみ可能であり、minimumSize() またはminimumSizeHint() の値が 0 以外であっても、ユーザーがサイズを 0 まで縮小することができます。この動作は、この関数を呼び出すことでウィジェットごとに変更できるほか、childrenCollapsible プロパティを設定することで、スプリッター内のすべてのウィジェットに対してグローバルに変更することもできます。

isCollapsible() およびchildrenCollapsibleも参照してください 。

[protected] void QSplitter::setRubberBand(int pos)

位置pos にゴムバンドを表示します。pos が負の値の場合、ゴムバンドは削除されます。

void QSplitter::setSizes(const QList<int> &list)

子ウィジェットのそれぞれのサイズを、list で指定された値に設定します。

スプリッターが水平の場合、これらの値は各ウィジェットの幅(ピクセル単位)を左から右の順に設定します。スプリッターが垂直の場合、各ウィジェットの高さを上から下の順に設定します。

list 内の余分な値は無視されます。list に含まれる値が少なすぎる場合、結果は未定義になりますが、プログラムは正常に動作します。

スプリッターウィジェットの全体的なサイズには影響しません。代わりに、余分なスペースや不足しているスペースは、サイズの相対的な重みに応じて各ウィジェットに配分されます。

サイズを 0 に指定すると、ウィジェットは非表示になります。各ウィジェットのサイズポリシーは維持されます。つまり、各ウィジェットの最小サイズヒントよりも小さい値は、そのヒントの値に置き換えられます。

sizes()も参照してください 。

void QSplitter::setStretchFactor(int index, int stretch)

位置index にあるウィジェットのサイズポリシーを更新し、伸縮係数をstretch に設定します。

stretch は実際のストレッチ係数ではありません。実際のストレッチ係数は、ウィジェットの初期サイズにstretch を乗じて計算されます。

この関数は便宜上提供されています。これは

QWidget *widget = splitter->widget(index);
QSizePolicy policy = widget->sizePolicy();
policy.setHorizontalStretch(stretch);
policy.setVerticalStretch(stretch);
widget->setSizePolicy(policy);

setSizes() およびwidget()も参照してください 。

[override virtual] QSize QSplitter::sizeHint() const

QFrame::sizeHint() const を再実装します。

QList<int> QSplitter::sizes() const

このスプリッター内のすべてのウィジェットのサイズパラメータのリストを返します。

スプリッターの向きが水平の場合、リストにはウィジェットの幅(ピクセル単位)が左から右の順に含まれます。向きが垂直の場合、リストにはウィジェットの高さ(ピクセル単位)が上から下の順に含まれます。

これらの値を別のスプリッターの `setSizes()` 関数に渡すと、このスプリッターと同じレイアウトのスプリッターが生成されます。

非表示のウィジェットのサイズは 0 になることに注意してください。

setSizes()も参照してください 。

[signal] void QSplitter::splitterMoved(int pos, int index)

このシグナルは、特定のindex にあるスプリッターのハンドルがpos の位置に移動されたときに発せられます。

アラビア語やヘブライ語などの右から左へ書く言語の場合、水平スプリッターの配置は逆になります。その場合、pos はウィジェットの右端からの距離となります。

moveSplitter()も参照してください 。

QWidget *QSplitter::widget(int index) const

スプリッターのレイアウト内の指定されたindex にあるウィジェットを返します。そのようなウィジェットが存在しない場合は、nullptr を返します。

count()、handle()、indexOf()、およびinsertWidget()も参照してください 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.