qt QSplitter详解
1、概述
QSplitter是Qt框架中的一个布局管理器类,它允许用户在应用程序窗口中创建可拖动的分隔器,以便动态地调整多个子窗口或控件的大小。QSplitter非常适合用于分割、重新排列和管理用户界面中的多个区域,提供了一种直观且灵活的方式来控制界面布局。
2、重要方法
QSplitter类提供了多种方法来管理和控制分隔器及其子控件:
-
构造函数:
QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
:根据指定的方向(水平或垂直)创建一个QSplitter对象,并可选地指定一个父控件。
-
添加和移除控件:
void addWidget(QWidget *widget)
:将一个子控件添加到QSplitter中。int indexOf(QWidget *widget)
:返回子控件在QSplitter中的索引位置。void insertWidget(int index, QWidget *widget)
:在指定索引位置插入一个子控件。void removeWidget(QWidget *widget)
:从QSplitter中移除一个子控件。
-
设置和获取属性:
void setOrientation(Qt::Orientation orientation)
:设置QSplitter的方向为水平或垂直。Qt::Orientation orientation() const
:获取QSplitter的当前方向。void setOpaqueResize(bool opaque)
:设置分隔器在调整大小时是否显示为不透明的样式。bool isOpaqueResize() const
:检查分隔器在调整大小时是否显示为不透明。void setSizes(const QList<int> &sizes)
:设置子控件的初始大小。QList<int> sizes() const
:获取当前子控件的大小。int handleWidth() const
:获取分隔器的宽度。void setCollapsible(int index, bool collapsible)
:设置指定索引位置的子控件是否可以折叠。bool isCollapsible(int index) const
:检查指定索引位置的子控件是否可以折叠。
-
布局和刷新:
void refresh()
:重新布局和绘制分隔器及其子控件。
3、重要信号
- splitterMoved(int pos,int index):当分割条被移动时发射
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QFrame>
#include <QHBoxLayout>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建一个主窗口
QWidget mainWindow;
mainWindow.setWindowTitle("QSplitter Example");
mainWindow.setFixedSize(800, 600);
// 创建一个水平布局
QHBoxLayout *layout = new QHBoxLayout(&mainWindow);
// 创建一个水平方向的QSplitter
QSplitter *horizontalSplitter = new QSplitter(Qt::Horizontal);
// 设置子控件的初始大小
horizontalSplitter->setSizes(QList<int>() << 100 << 200 << 300);
// 创建并添加子控件到水平QSplitter中
QFrame *leftFrame = new QFrame();
leftFrame->setStyleSheet("QFrame{background-color:rgb(255, 0, 0)}");
leftFrame->setMinimumWidth(100);
horizontalSplitter->addWidget(leftFrame);
QTextEdit *textEdit = new QTextEdit();
horizontalSplitter->addWidget(textEdit);
QSplitter *verticalSplitter = new QSplitter(Qt::Vertical);
verticalSplitter->setOpaqueResize(false);
QFrame *topRightFrame = new QFrame();
topRightFrame->setStyleSheet("QFrame{background-color:rgb(0, 255, 0)}");
verticalSplitter->addWidget(topRightFrame);
QTextEdit *bottomRightTextEdit = new QTextEdit();
verticalSplitter->addWidget(bottomRightTextEdit);
// 将垂直QSplitter添加到水平QSplitter中
horizontalSplitter->addWidget(verticalSplitter);
// 将水平QSplitter添加到主布局中
layout->addWidget(horizontalSplitter);
// 设置主窗口的布局
mainWindow.setLayout(layout);
// 显示主窗口
mainWindow.show();
return app.exec();
}
觉得有帮助的话,打赏一下呗。。