Qt控件QSplitter的用法

简介

继承自 QFrame

构造

  • 创建竖排分割窗口(一列多行)
QSplitter *splitterVertical = new QSplitter(Qt::Vertical, nullptr); 
  • 创建横排分割窗口(一行多列)
QSplitter *splitterHorizontal = new QSplitter(Qt::Horizontal, nullptr);

添加部件

  • 以子控件的方式添加
QTextEdit *textTop= new QTextEdit(QObject::tr("Top Widget"), splitterVertical);
QTextEdit *textBottom= new QTextEdit(QObject::tr("Bottom Widget"), splitterVertical);
  • 以addWidget方式添加
QTextEdit *textTop= new QTextEdit(QObject::tr("Top Widget"));
QTextEdit *textBottom= new QTextEdit(QObject::tr("Bottom Widget"));
splitterVertical->addWidget(textTop);
splitterVertical->addWidget(textBottom);

将QSplitter添加到QWidget中

QHBoxLayout * m_layout = new QHBoxLayout;
m_layout->addWidget(splitterVertical);
ui->centralwidget->setLayout(m_layout);

属性

childrenCollapsible小控件大小是否可以为0

//false: 不可为0
splitterVertical->setChildrenCollapsible(false);

handleWidth拆分线的宽度

//默认取决于平台和样式设置, 可以用以下方法修改:
splitterVertical->setHandleWidth(5);

opaqueResize小控件是否在调整拆分线时动态刷新, 默认为动态(true)

splitterVertical->setOpaqueResize(false);

orientation拆分器的方向, 默认横向

//Qt::Horizontal 或 Qt::Vertical.
splitterVertical->setOrientation(Qt::Vertical); //设置为纵向(一列多行)

接口

设置可拉伸小控件

//设定第0个控件为可拉伸(1:改变总窗口大小时, 这个控件高宽都可以变)
splitterVertical->setStretchFactor(0,1); 

返回小控件数量

int QSplitter::count() const

返回一个新的小控件句柄

QSplitterHandle *QSplitter::createHandle()

查找小控件widget的索引

//查找失败则返回-1
int QSplitter::indexOf(QWidget *widget) const

在指定索引处插入窗口widget

//如果widget已经在其中, 它会被移动到新的位置
void QSplitter::insertWidget(int index, QWidget *widget)

返回索引处的widget是否可折叠

bool QSplitter::isCollapsible(int index) const

返回最小大小

QSize QSplitter::minimumSizeHint() const

移动左边/顶边到指定位置

//移动左边/顶边到 index的 pos处
void QSplitter::moveSplitter(int pos, int index)

小控件替换

//替换索引处的widget
QWidget *QSplitter::replaceWidget(int index, QWidget *widget)

恢复窗口布局到指定状态

//成功返回true
bool QSplitter::restoreState(const QByteArray &state)

//例: 从 QSettings中恢复
QSettings settings;
splitter->restoreState(settings.value("splitterSizes").toByteArray());

保存窗口状态

QByteArray QSplitter::saveState() const

设置小控件是否可折叠

//设置索引处的widget是否可折叠
void QSplitter::setCollapsible(int index, bool collapse)
//例: 设置第1个控件不可折叠(即: 不会完全隐藏)
splitterVertical->setCollapsible(1, 0);

设置橡皮筋选择框位置

//在pos处设置一个橡皮筋选择框
void QSplitter::setRubberBand(int pos)

批量设置小控件的大小

//将小控件的大小设置为列表给定的值
//如果是水平拆分器, 列表给定的值将作为宽度, 如果是垂直拆分器, 则作为高度.
//如果少于小控件数量, 则少的部分加载默认值, 如果多, 则多的部分忽略
//如果设置为0, 则小控件不可见.
void QSplitter::setSizes(const QList<int> &list)

返回所有小控件大小列表

//如果是水平拆分器, 则列表为宽度, 否则为高度
QList<int> QSplitter::sizes() const

返回索引处的小控件

//如果没有, 则返回 nullptr
QWidget *QSplitter::widget(int index) const

高级用法

设置拆分器大小不可调整

QSplitterHandle *splitterHandle = splitter->handle(1);     //获取第1个分割器
if(splitterHandle) 
{ 
    //Disable the Middle Line, it can't adjust. 
    splitterHandle->setDisabled(true); 
}
posted @ 2024-04-29 22:08  技术不支持  阅读(36)  评论(0编辑  收藏  举报