QSplitter Class
QSplitter クラスはスプリッターウィジェットを実装しています。詳細...
ヘッダ | #include <QSplitter> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
継承: | QFrame |
プロパティ
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
パブリック関数
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() を再度指定すると、元に戻ります。
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)
QFrame コンストラクタに渡されたparent 引数で水平スプリッタを構築します。
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
スプリッタのレイアウトに含まれるウィジェットの数を返します。
[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 のハンドルは常に非表示になります。
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
[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 に変更できます。この動作は、この関数を呼び出すことでウィジェットごとに変更することができます。また、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()も参照 。
© 2025 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.