容器(Containers)-Qt-思维导图-学习笔记

容器(Containers)

在这里插入图片描述

容器(Containers)

(1)Group Box:组框

QGroupBox

  • 继承关系:继承自 QWidget

  • 功能:用于构建分组框,通常带有边框和标题栏

  • 用途:作为容器部件,用于布置各种窗口部件

  • 布局:建议内部使用布局控件(如 QBoxLayout)进行管理

  • 键盘快捷方式:支持键盘焦点移动到组框的子部件

用法示例

  • 使用 3 个 QRadioButton 单选框按钮,与QVBoxLayout(垂直布局)来展示组框的基本使用

  • 新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可

  • mainwindow.h

    • 1 #ifndef MAINWINDOW_H
      2 #define MAINWINDOW_H
      3
      4 #include
      5 #include
      6 #include
      7 #include
      8
      9 class MainWindow : public QMainWindow
      10 {
      11 Q_OBJECT
      12
      13 public:
      14 MainWindow(QWidget parent = nullptr);
      15 ~MainWindow();
      16
      17 private:
      18 /
      声明对象 */
      19 QGroupBox *groupBox;
      20 QVBoxLayout *vBoxLayout;
      21 QRadioButton *radioButton[3];
      22 };
      23 #endif // MAINWINDOW_H
  • mainwindow.cpp

    • 1 #include “mainwindow.h”
      2 #include
      3
      4 MainWindow::MainWindow(QWidget parent)
      5 : QMainWindow(parent)
      6{
      7 /
      设置主窗体位置与大小 /
      8 this->setGeometry(0, 0, 800, 480);
      9 /
      以标题为“QGroupBox 示例”实例化 groupBox 对象 /
      10 groupBox = new QGroupBox(tr(“QGroupBox 示例”), this);
      11 groupBox->setGeometry(300, 100, 300, 200);
      12
      13 vBoxLayout = new QVBoxLayout();
      14
      15 /
      字符串链表 /
      16 QList list;
      17 list<<“选项一”<<“选项二”<<“选项三”;
      18 for(int i = 0; i < 3; i++){
      19 radioButton[i] = new QRadioButton();
      20 radioButton[i]->setText(list[i]);
      21 /
      在 vBoxLayout 添加 radioButton /
      22 vBoxLayout->addWidget(radioButton[i]);
      23 }
      24 /
      添加一个伸缩量 1 /
      25 vBoxLayout->addStretch(1);
      26 /
      vBoxLayout 布局设置为 groupBox 布局 */
      27 groupBox->setLayout(vBoxLayout);
      28 }
      29
      30 MainWindow::~MainWindow()
      31 {
      32 }
  • main.cpp

    • 由新建项目时生成,无改动

运行效果

  • radioButton 有规则的排布在 groupBox 组框里面

(2)Scroll Area:滚动区域

QScrollArea

  • 继承关系:继承自 QAbstractScrollArea

  • 功能:显示子部件的内容

  • 滚动条:当子部件超出框架大小时会出现滚动条,允许查看完整内容

用法示例

  • 使用一个 Label 标签,将 Label 标签设置为一张图片,并把 Label 标签放置于滚动区域内,此时图片应要大于滚动区域才会出现滚动条

  • 新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可

  • 添加一张资源图片

  • mainwindow.h

    • 1 #ifndef MAINWINDOW_H
      2 #define MAINWINDOW_H
      3
      4 #include
      5 #include
      6 #include
      7
      8 class MainWindow : public QMainWindow
      9{
      10 Q_OBJECT
      11
      12 public:
      13 MainWindow(QWidget parent = nullptr);
      14 ~MainWindow();
      15
      16 private:
      17 /
      定义 QScrollArea 对象 */
      18 QScrollArea *scrollArea;
      19 QLabel *label;
      20 };
      21 #endif // MAINWINDOW_H
  • mainwindow.cpp

    • 1 #include “mainwindow.h”
      2
      3 MainWindow::MainWindow(QWidget parent)
      4 : QMainWindow(parent)
      5{
      6 this->setGeometry(0, 0, 800, 480);
      7
      8 scrollArea = new QScrollArea(this);
      9 /
      设置滚动区域为 700380 /
      10 scrollArea->setGeometry(50, 50, 700, 380);
      11
      12 label = new QLabel();
      13 /
      label 显示的 lantingxu.png 图片分辨率为 1076
      500 */
      14 QImage image(“:/images/lantingxu.png”);
      15 label->setPixmap(QPixmap::fromImage(image));
      16
      17 scrollArea->setWidget(label);
      18
      19 }
      20
      21 MainWindow::~MainWindow()
      22 {
      23 }
  • main.cpp

    • 由新建项目时生成,无改动

运行效果

  • 由于图片的大小大于滚动区域的大小,所以在滚动区域出现了滚动条,可以拖动滚动条来查看这张图片其余部分

(3)Tool Box:工具箱

QToolBox

  • 继承关系:继承自 QFrame

  • 功能:提供一列选项卡以显示多个小部件项

  • 布局:显示选项卡在一列上,当前项在下方显示

(4)Tab Widget:标签小部件

QTabWidget

  • 继承关系:继承自 QWidget

  • 功能:提供一组选项卡以实现多页面显示

  • 优点:节省界面空间,便于显示更多信息

用法示例

  • 创建 3 个页面,每个页面里有一个 Label 标签部件,点击每个页面的选项卡则会切换到不同的页面上

  • 新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可

  • 添加几张资源图片

  • mainwindow.h

    • 1 #ifndef MAINWINDOW_H
      2 #define MAINWINDOW_H
      3
      4 #include
      5 #include
      6 #include
      7 #include
      8
      9 class MainWindow : public QMainWindow
      10 {
      11 Q_OBJECT
      12
      13 public:
      14 MainWindow(QWidget parent = nullptr);
      15 ~MainWindow();
      16
      17 private:
      18 /
      声明对象 */
      19 QWidget *widget;
      20 QTabWidget *tabWidget;
      21 QHBoxLayout *hBoxLayout;
      22 QLabel *label[3];
      23 };
      24 #endif // MAINWINDOW_H
  • mainwindow.cpp

    • 1 #include “mainwindow.h”
      2
      3 MainWindow::MainWindow(QWidget parent)
      4 : QMainWindow(parent)
      5{
      6 this->setGeometry(0, 0, 800, 480);
      7
      8 widget = new QWidget(this);
      9 /
      居中 /
      10 this->setCentralWidget(widget);
      11
      12 /
      多页面小部件 /
      13 tabWidget = new QTabWidget();
      14
      15 /
      水平布局实例化 /
      16 hBoxLayout = new QHBoxLayout();
      17 QList strLabelList;
      18 strLabelList<<“标签一”<<“标签二”<<“标签三”;
      19
      20 QList strTabList;
      21 strTabList<<“页面一”<<“页面二”<<“页面三”;
      22
      23 QList iconList;
      24 iconList<<“:/icons/icon1”
      25 <<“:/icons/icon2”
      26 <<“:/icons/icon3”;
      27
      28 for (int i = 0; i < 3; i++) {
      29 label[i] = new QLabel();
      30 /
      设置标签文本 /
      31 label[i]->setText(strLabelList[i]);
      32 /
      标签对齐方式(居中) /
      33 label[i]->setAlignment(Qt::AlignCenter);
      34 /
      添加页面 /
      35 tabWidget->addTab(label[i],
      36 QIcon(iconList[i]),
      37 strTabList[i]
      38 );
      39 }
      40 /
      是否添加关闭按钮 /
      41 //tabWidget->setTabsClosable(true);
      42 /
      将 tabWidget 水平直排布 /
      43 hBoxLayout->addWidget(tabWidget);
      44 /
      将垂直布局设置到 widget */
      45 widget->setLayout(hBoxLayout);
      46 }
      47
      48 MainWindow::~MainWindow()
      49 {
      50 }
  • main.cpp

    • 由新建项目时生成,无改动

运行效果

  • 点击不同页面的选项卡则会切换到不同的页面上

(5)Stacked WIdget:堆叠小部件

QStackedWidget

  • 继承关系:继承自 QFrame

  • 功能:提供一个小部件堆栈,单次显示一个小部件

  • 用途:可与 QListWidget 结合使用,通过列表项切换显示不同内容

  • 与 QTabWidget 的对比

    • 相似性:可用于创建类似于 QTabWidget 的用户界面

    • 底层架构:基于 QStackedLayout 类构建

  • 通常与 QListWidget 搭配使用,形成左侧列表与右侧内容切换的布局

  • 信号槽连接

    • 作用:通过信号槽连接,点击左边的 QListWidget 列表项,可以切换右边 QStackedWidget 中显示的内容

    • 显示效果:每次点击后,QStackedWidget 会显示一个不同的 widget 小部件

用法示例

  • 创建 3 个堆栈页面,每个页面里有一个 Label 标签部件,点击每个列表的不同项则会切换到不同的页面上

  • 新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可

  • mainwindow.h

    • 1 #ifndef MAINWINDOW_H
      2 #define MAINWINDOW_H
      3
      4 #include
      5 #include
      6 #include
      7 #include
      8 #include
      9
      10 class MainWindow : public QMainWindow
      11 {
      12 Q_OBJECT
      13
      14 public:
      15 MainWindow(QWidget parent = nullptr);
      16 ~MainWindow();
      17
      18 private:
      19 /
      widget 小部件 */
      20 QWidget widget;
      21 /
      水平布局 */
      22 QHBoxLayout hBoxLayout;
      23 /
      列表视图 */
      24 QListWidget listWidget;
      25 /
      堆栈窗口部件 */
      26 QStackedWidget stackedWidget;
      27 /
      3 个标签 */
      28 QLabel *label[3];
      29
      30 };
      31 #endif // MAINWINDOW_H
  • mainwindow.cpp

    • 1 #include “mainwindow.h”
      2
      3 MainWindow::MainWindow(QWidget parent)
      4 : QMainWindow(parent)
      5{
      6 this->setGeometry(0, 0, 800, 480);
      7
      8 /
      widget 小部件实例化 /
      9 widget = new QWidget(this);
      10
      11 /
      设置居中 /
      12 this->setCentralWidget(widget);
      13
      14 /
      垂直布局实例化 /
      15 hBoxLayout = new QHBoxLayout();
      16
      17 /
      堆栈部件实例化 /
      18 stackedWidget = new QStackedWidget();
      19
      20 /
      列表实例化 /
      21 listWidget = new QListWidget();
      22
      23 QList strListWidgetList;
      24 strListWidgetList<<“窗口一”<<“窗口二”<<“窗口三”;
      25
      26 for (int i = 0; i < 3; i++){
      27 /
      listWidget 插入项 /
      28 listWidget->insertItem(
      29 i,
      30 strListWidgetList[i]
      31 );
      32 }
      33
      34 QList strLabelList;
      35 strLabelList<<“标签一”<<“标签二”<<“标签三”;
      36
      37 for (int i = 0; i < 3; i++){
      38 label[i] = new QLabel();
      39 /
      设置标签文本 /
      40 label[i]->setText(strLabelList[i]);
      41 /
      标签对齐方式(居中) /
      42 label[i]->setAlignment(Qt::AlignCenter);
      43 /
      添加页面 /
      44 stackedWidget->addWidget(label[i]);
      45 }
      46
      47 /
      设置列表的最大宽度 /
      48 listWidget->setMaximumWidth(200);
      49 /
      添加到水平布局 /
      50 hBoxLayout->addWidget(listWidget);
      51 hBoxLayout->addWidget(stackedWidget);
      52
      53 /
      将 widget 的布局设置成 hboxLayout /
      54 widget->setLayout(hBoxLayout);
      55
      56 /
      利用 listWidget 的信号函数 currentRowChanged()与
      57 * 槽函数 setCurrentIndex(),进行信号与槽连接
      58 */
      59 connect(listWidget, SIGNAL(currentRowChanged(int)),
      60 stackedWidget, SLOT(setCurrentIndex(int)));
      61 }
      62
      63 MainWindow::~MainWindow()
      64 {
      65 }
  • main.cpp

    • 由新建项目时生成,无改动

运行效果

  • 点击列表视图的不同的项会切换到不同的页面上

(6)Frame:帧

(7)Widget:小部件

QWidget

  • 基类:所有用户界面对象的基类(如 QLabel)

  • 功能:基本用户界面单元,接收鼠标、键盘等事件,并绘制自己

  • 特性:矩形形状,按照 Z-order 排序,支持移植和自定义

    • 矩形形状:每个 Widget 都是矩形的

    • Z-order 排序:Widget 按照 Z-order 进行排序,这决定了窗口重叠时的显示顺序

      • 定义:Z-order 是重叠二维对象的顺序,例如堆叠窗口管理器中的窗口

      • GUI 特性:窗口可能重叠,Z-order 决定哪个窗口在顶部

      • 三维坐标轴解释:在三维坐标系中,Z 轴表示上下方向,GUI 窗口沿 Z 轴堆叠,Z-order 确定窗口的前后顺序

      • 类比:就像桌面上的一叠纸,最上面的纸(窗口)Z 值最高

(8)MDI Area:MDI 区域

QMdiArea

  • 继承关系:继承自 QAbstractScrollArea

  • 功能:提供显示 MDI 窗口的区域,类似于窗口管理器

  • 使用场景:常用于复杂程序的 MDI 框架,能直接在 Qt Designer 中使用

(9)Dock Widget:停靠窗体部件

QDockWidget

  • 继承关系:继承自 QWidget

  • 功能:提供可停靠的部件,支持浮动

    • 定义:QDockWidget 提供了停靠部件的概念,通常被称为工具面板或实用程序窗口

    • 位置:停靠窗口是放置在 QMainWindow 中央窗口附近的辅助窗口

  • 用途:作为工具面板或实用程序窗口,允许用户在 QMainWindow 内外移动

  • 位置控制:可限制移动、浮动和关闭能力,支持不同的停靠区域配置

    • 移动与浮动

      • 移动能力:停靠窗口可以在当前区域内移动,也可以移动到新的区域

      • 浮动功能:用户可以将停靠窗口浮动,即不与 QMainWindow 停靠

    • API 控制

      • 限制功能:QDockWidget 的 API 允许程序员限制其移动、浮动和关闭能力,以及指定它们可以放置的区域
    • 初始停靠区域

      • 可选区域

        • Qt.BottomDockWidgetArea:底部停靠

        • Qt.LeftDockWidgetArea:左边停靠

        • Qt.RightDockWidgetArea:右边停靠

        • Qt.TopDockWidgetArea:顶部停靠

        • Qt.NoDockWidgetArea:不显示小部件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不迷茫(˵¯͒¯͒˵)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值