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();  

    }

觉得有帮助的话,打赏一下呗。。

相关推荐
打工哪有不疯的16 小时前
使用 MSYS2 为 Qt (MinGW 32/64位) 完美配置 OpenSSL
c++·qt
LYOBOYI12317 小时前
qtcpSocket详解
c++·qt
无小道19 小时前
Qt——网络编程
开发语言·qt
云中飞鸿19 小时前
VS编写QT程序,如何向linux中移植?
linux·开发语言·qt
草莓熊Lotso20 小时前
Qt 主窗口核心组件实战:菜单栏、工具栏、状态栏、浮动窗口全攻略
运维·开发语言·人工智能·python·qt·ui
云中飞鸿1 天前
QTCreator快捷键
qt
十五年专注C++开发1 天前
QStyleItemDelegate:自定义列表控件类神器
qt·model·view·delegate
无小道1 天前
Qt——事件简单介绍
开发语言·前端·qt
mengzhi啊2 天前
QUndoView 本质是一个 Qt 界面控件(继承自 QListView),专门适配 QUndoStack
qt
编程小白20262 天前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习