常用界面设计组件 —— 容器组件

    • 2.6 容器组件
      • 2.6.1 QGroupBox
      • 2.6.2 QScrollArea
      • 2.6.3 QToolBox
      • 2.6.4 QTabWidget
      • 2.6.5 QStackedWidget

2.6 容器组件

为了将界面上的各个组件的分布设计得更加美观,经常 使用一些容器类,如 QgoupBox、QtabWidget、 QToolBox等。

2.6.1 QGroupBox

实例效果:

在这里插入图片描述

代码化UI设计:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QGroupBox>
#include <QRadioButton>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);  // 构造函数~Widget();  // 析构函数private:QGroupBox *gb1;  // 第一个分组框QGroupBox *gb2;  // 第二个分组框QRadioButton *rb1;  // 单选按钮1QRadioButton *rb2;  // 单选按钮2QRadioButton *rb3;  // 单选按钮3QRadioButton *rb4;  // 单选按钮4QRadioButton *rb5;  // 单选按钮5
};#endif // WIDGET_H
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>Widget::Widget(QWidget *parent) : QWidget(parent)
{// 创建第一个分组框gb1 = new QGroupBox("性别", this);rb1 = new QRadioButton("男");rb2 = new QRadioButton("女");QVBoxLayout *vb1 = new QVBoxLayout();  // 垂直布局管理器vb1->addWidget(rb1);vb1->addWidget(rb2);gb1->setLayout(vb1);  // 设置分组框1的布局为垂直布局// 创建第二个分组框gb2 = new QGroupBox("所在年级", this);rb3 = new QRadioButton("三年级");rb4 = new QRadioButton("四年级");rb5 = new QRadioButton("五年级");QVBoxLayout *vb2 = new QVBoxLayout;  // 垂直布局管理器vb2->addWidget(rb3);vb2->addWidget(rb4);vb2->addWidget(rb5);gb2->setLayout(vb2);  // 设置分组框2的布局为垂直布局// 创建水平布局管理器,将两个分组框添加到水平布局中QHBoxLayout *mainLayout = new QHBoxLayout(this);mainLayout->addWidget(gb1);mainLayout->addWidget(gb2);setLayout(mainLayout);  // 设置整体布局为水平布局
}Widget::~Widget()
{
}

可视化UI设计

在这里插入图片描述

2.6.2 QScrollArea

实例化效果:

在这里插入图片描述

代码化UI设计:

/* widget.h */
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QScrollArea>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();private:QLabel *lb;         // 标签控件QScrollArea *sa;    // 滚动区域控件
};#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
#include <QHBoxLayout>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{// 通过ui指针初始化界面ui->setupUi(this);// 创建标签控件并设置图片QLabel *lb = new QLabel(this);QPixmap pix("1.png");lb->setPixmap(pix);// 将标签控件设置为滚动区域的内容ui->sa->setWidget(lb);// 创建主布局,并添加滚动区域控件QVBoxLayout *mainbox = new QVBoxLayout;mainbox->addWidget(ui->sa);// 设置主布局为当前窗口的布局setLayout(mainbox);
}Widget::~Widget()
{// 释放ui指针delete ui;
}

可视化UI设计

在这里插入图片描述

在这里插入图片描述

可以选择垂直布局选项

在这里插入图片描述

最终的效果 可以看到页面显示不全,有滑动拉条显示

在这里插入图片描述

2.6.3 QToolBox

QToolBox类提供了一列选项卡窗口,当前项显示在当前 选项卡下面,适用于分类浏览、内容展示、操作指引这 一类的使用场景。

在这里插入图片描述

代码化UI设计:

#include "widget.h"
#include "ui_widget.h"#include <QPushButton>
#include <QToolBox>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{// 初始化界面ui->setupUi(this);// 创建工具箱控件QToolBox *tb = new QToolBox(this);// 创建第一个页面QWidget *page1 = new QWidget(this);QPushButton *pb1 = new QPushButton("大话西游", page1);QPushButton *pb2 = new QPushButton("赌圣", page1);QPushButton *pb3 = new QPushButton("功夫", page1);QVBoxLayout *layout1 = new QVBoxLayout(this);layout1->addWidget(pb1);layout1->addWidget(pb2);layout1->addWidget(pb3);page1->setLayout(layout1);// 将第一个页面添加到工具箱,并设置标题tb->addItem(page1, "周星驰");// 创建第二个页面QWidget *page2 = new QWidget(this);QPushButton *pb4 = new QPushButton("无间道", page2);QPushButton *pb5 = new QPushButton("拆弹专家", page2);QVBoxLayout *layout2 = new QVBoxLayout(this);layout2->addWidget(pb4);layout2->addWidget(pb5);page2->setLayout(layout2);// 将第二个页面添加到工具箱,并设置标题tb->addItem(page2, "刘德华");// 创建水平布局,将工具箱添加到布局中QHBoxLayout *layout3 = new QHBoxLayout(this);layout3->addWidget(tb);// 设置主布局为当前窗口的布局setLayout(layout3);
}Widget::~Widget()
{// 释放ui指针delete ui;
}

可视化UI设计:

在这里插入图片描述

2.6.4 QTabWidget

QTabWidget 的一种带标签页的窗口,在这种类型的窗 口中可以存储多个子窗口,每个子窗口的显示可以通过 对应的标签进行切换。

实例效果:

在这里插入图片描述

代码化UI设计

#include "widget.h"
#include "ui_widget.h"#include <QTabWidget>
#include <QTextEdit>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{// 初始化界面ui->setupUi(this);// 创建选项卡控件QTabWidget *tw = new QTabWidget(this);// 创建文本编辑控件,并添加到选项卡QTextEdit *te1 = new QTextEdit("one", tw);QTextEdit *te2 = new QTextEdit("two", tw);QTextEdit *te3 = new QTextEdit("three", tw);// 添加选项卡页,并设置标题tw->addTab(te1, "1.c");tw->addTab(te2, "2.c");tw->addTab(te3, "3.c");// 创建垂直布局,将选项卡添加到布局中QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(tw);// 设置主布局为当前窗口的布局setLayout(layout);
}Widget::~Widget()
{// 释放ui指针delete ui;
}

可视化UI设计:

在这里插入图片描述

2.6.5 QStackedWidget

QStackedWidget列提供了堆叠窗体的效果。在实际应用中,堆叠窗体多与列表框QlistWidget和下拉列表框 QCombobox配合使用。

实例效果

在这里插入图片描述

代码化UI设计

#include "widget.h"
#include "ui_widget.h"#include <QStackedWidget>
#include <QTextEdit>
#include <QComboBox>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{// 初始化界面ui->setupUi(this);// 创建堆叠窗口控件QStackedWidget *sw = new QStackedWidget(this);// 创建文本编辑控件,并添加到堆叠窗口QTextEdit *te1 = new QTextEdit("aa", sw);QTextEdit *te2 = new QTextEdit("bb", sw);QTextEdit *te3 = new QTextEdit("cc", sw);sw->addWidget(te1);sw->addWidget(te2);sw->addWidget(te3);// 创建下拉框控件QComboBox *cb = new QComboBox(this);cb->addItem("111");cb->addItem("222");cb->addItem("333");// 创建垂直布局,将堆叠窗口和下拉框添加到布局中QVBoxLayout *mainLayout = new QVBoxLayout(this);mainLayout->addWidget(sw);mainLayout->addWidget(cb);// 设置主布局为当前窗口的布局setLayout(mainLayout);// 连接下拉框的activated信号和堆叠窗口的setCurrentIndex槽函数connect(ui->cb, SIGNAL(activated(int)), ui->sw, SLOT(setCurrentIndex(int)));
}Widget::~Widget()
{// 释放ui指针delete ui;
}

可视化UI设计

在这里插入图片描述

信号和槽之间也可以用代码方式:

#include "widget.h"
#include "ui_widget.h"#include <QStackedWidget>
#include <QTextEdit>
#include <QComboBox>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{// 初始化界面ui->setupUi(this);// 连接下拉框的activated信号和堆叠窗口的setCurrentIndex槽函数connect(ui->cb, SIGNAL(activated(int)), ui->sw, SLOT(setCurrentIndex(int)));
}Widget::~Widget()
{delete ui;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4运用C++和框架开发坦克大战教程笔记(十五)(第46~48集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十五&#xff09;&#xff08;第46~48集&#xff09; 46. 批量加载 UClass 功能测试批量加载多个同类 UClass 资源 47. 创建单个资源对象测试加载并创建单个 UClass 资源对象 48. 创建同类资源对象 46. 批量加载 UClass 功能 逻…

Web开发4:单元测试

在Web开发中&#xff0c;单元测试是一种重要的开发实践&#xff0c;它可以帮助我们确保代码的质量和可靠性。通过编写和运行单元测试&#xff0c;我们可以验证代码的正确性&#xff0c;减少错误和缺陷&#xff0c;并提高代码的可维护性。本文将介绍单元测试的概念、好处以及如何…

Go后端开发 -- 即时通信系统

Go后端开发 – 即时通信系统 文章目录 Go后端开发 -- 即时通信系统一、即时通信系统1.整体框架介绍2.基础server构建3.用户上线及广播功能4.用户消息广播机制5.用户业务封装6.用户在线查询7.修改用户名8.超时强踢9.私聊功能10.完整代码 二、客户端实现1.建立连接2.命令行解析3.…

蓝桥杯省赛无忧 课件41 选择排序

01 选择排序的思想 02 选择排序的实现 03 例题讲解 #include <iostream> using namespace std; void selectionSort(int arr[], int n) {int i, j, min_index;// 移动未排序数组的边界for (i 0; i < n-1; i) {// 找到未排序的部分中最小元素的索引min_index i;for (…

使用Fiddler进行弱网测试

测试APP、web经常需要用到弱网测试&#xff0c;也就是在信号差、网络慢的情况下进行测试。我们自己平常在使用手机APP时&#xff0c;在地铁、电梯、车库等场景经常会遇到会话中断、超时等情况&#xff0c;这种就属于弱网。 普通的弱网测试可以选择第三方工具对带宽、丢包、延时…

自然语言处理--基于HMM+维特比算法的词性标注

自然语言处理作业2--基于HMM维特比算法的词性标注 一、理论描述 词性标注是一种自然语言处理技术&#xff0c;用于识别文本中每个词的词性&#xff0c;例如名词、动词、形容词等&#xff1b; 词性标注也被称为语法标注或词类消疑&#xff0c;是语料库语言学中将语料库内单词…

面试题之RocketMq

1. RocketMq的组成及各自的作用&#xff1f; 在RocketMq中有四个部分组成&#xff0c;分别是Producer&#xff0c;Consumer&#xff0c;Broker&#xff0c;以及NameServer&#xff0c;类比于生活中的邮局&#xff0c;分别是发信者&#xff0c;收信者&#xff0c;负责暂存&#…

和硕拿下AI Pin代工大单公司 | 百能云芯

和硕公司近日成功中标AI Pin代工大单&#xff0c;AI Pin被认为是继iPhone之后的下一个划时代产品&#xff0c;吸引了全球科技圈的广泛关注。和硕公司对此表示&#xff0c;他们不会只专注于单一客户&#xff0c;而是期望在下半年有更多新品上市&#xff0c;为公司带来丰硕的业绩…

creo草绘3个实例学习笔记

creo草绘3个实例 文章目录 creo草绘3个实例草绘01草绘02草绘03 草绘01 草绘02 草绘03

顺序表的增、删、改、查

小伙伴们好&#xff0c;学完C语言&#xff0c;就要开始学数据结构了&#xff0c;数据结构也是非常重要的&#xff0c;今天我们主要来学习在数据结构中最常用的增删改查操作。话不多说&#xff0c;一起来学习吧 1.数据结构相关概念 1.什么是数据结构&#xff1f; 数据结构是由…

Spring Boot 学习之——@SpringBootApplication注解(自动注解原理)

SpringBootApplication注解 springboot是基于spring的新型的轻量级框架&#xff0c;最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看&#xff0c;如何实现传奇的自动配置 SpringBootApplication//标注在某个类上&#xff0c;表示这个类是SpringBoot…

Supplier 惰性调用和 Future#get 同步等待调用结合

&#x1f4d6;一、背景介绍 关于任务异步执行&#xff0c;两个点不可避免&#xff1a;异步结果和异步回调。 而在我的工程中有这样一段代码&#xff1a;使用 CompletableFuture 进行封装&#xff0c;可以异步执行&#xff0c;异步回调&#xff0c;通过 get() 等待异步任务的结…