QSplitter Class

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

Header: #include <QSplitter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: 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() を使って追加することです。

次の例では、QListViewQTreeViewQTextEdit を、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() を再度指定すると、元に戻ります。

addWidget注意: QSplitterにQLayout を追加することはサポートされていません(setLayout ()またはQSplitterをQLayout の親にする)。

QSplitterHandle,QHBoxLayout,QVBoxLayout,QTabWidgetも参照してください

プロパティ Documentation

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::HorizontalQt::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)

与えられたorientationparent でスプリッターを構築する。

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

minmax が 0 でない場合、*min と *maxindex におけるスプリッタの有効範囲を返します。

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 のハンドルは常に非表示になります。

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 に設定します。

注意 :widgetreparented をスプリッタに取り込むので、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

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

スプリッタの方向が horizontal の場合、リストには左から右へのウィジェットの幅がピクセル単位で含まれます。 方向が vertical の場合、リストには上から下へのウィジェットの高さがピクセル単位で含まれます。

この値を他のスプリッタの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()も参照して ください。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。