이 페이지에서

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

상세 설명

스플리터(splitter)를 사용하면 사용자가 자식 위젯들 사이의 경계를 드래그하여 자식 위젯의 크기를 조절할 수 있습니다. 하나의 스플리터로 여러 개의 위젯을 제어할 수 있습니다. QSplitter의 일반적인 사용법은 여러 위젯을 생성한 후 insertWidget() 또는 addWidget()를 사용하여 추가하는 것입니다.

다음 예제는 QListView, QTreeView, QTextEdit 을 두 개의 스플리터 핸들과 함께 나란히 표시합니다.

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.