Qt --- 其他控件的介绍 --- 多元素控件

news/2024/9/29 22:29:33 标签: qt, 开发语言

一、多元素控件

Qt中提供的多元素控件有:

QListWidget、QListView、QTableWidget、QTableView、QTreeWidget、QTreeView。

前两个为列表、中间两个为表格、后两个为树形。

xxWidget vs xxView是啥区别?

xxView是更底层的实现,xxWidget是基于xxView封装而来的。此处xxWidget是MVC结构的一种经典实现,MVC也是软件开发中,非常经典的软件结构的组织形式了。

M model 数据、V view 视图界面 C controller 控制器 数据和试图之间的业务流程,此处xxView只是负责实现了试图,不负责数据如何存储表示,更不负责数据和试图之间的交互。因此如果使用xxView就需要程序员自己实现model和controller部分,比较麻烦,xxWidget基于xxView同时把model和controller都帮我们实现好了,拿过来就可以使用,人家提供了功能很方便的api,让我们直接就用。

二、QListWidget 控件

核心属性

核心方法

 列表中的每个元素/每一项就称为是一个Item,更具体的说,通过QListWidgetItem类表示的。

此处的row参数就表示插入完毕之后新的元素在第几行。把新元素插入到第几行之前。

核心信号

代码:

三、Table Widget控件

使用QTableWidget表示一个表格控件,一个表格中包含若干行,每一行又包含若干列,表格中的每个单元格,是一个QTableWidgetItem对象。

核心方法

 

核心信号

QTableWidgetItem核心方法

代码:

如果当前表格中的数据是固定的,完全就可以通过图形化界面来操作,但是实际开发中,很多时候数据是从文件/网络来加载的,此时通过图形化编辑就不合适。

 四、Tree Widget控件

使用QTreeWidget表示一个树形控件,里面的每个元素,都是一个QTreeWidgetItem,每个QTreeWidgetItem可以包含多个文本和图标,每隔文本/图标为一个列。可以给QTreeWidget设置顶层节点,然后再给顶层节点添加子节点,从而构成树形结构。

QTreeWidget核心方法

QTreeWidget控件虽然是树形结构,但是这个树形结构,没有体现出根节点,是从根节点的下一层子节点开始计算的

QTreeWidgetItem核心方法

 代码:

 上述这几个控件相关的操作,数据都是在内存中保存的,无论在界面上做任何操作,重新运行程序,之前的数据就都没了。如果要想让数据能够重启也不丢失,就需要编写更多的代码把内存存储的数据获取到,写入到文件中,并且在下次运行的时候从文件加载数据。

五、QGroupBox的使用 容器类控件。

多元素控件,包含的内容是一个一个自定义好的Item对象,容器类控件包含的内容是前面已经学过的各种控件了。

QGroupBox分组框

可以把其他的各种控件放到GroupBox中,这些内部的控件的父元素就不是this了,而是这个GroupBox。就只是为了让界面看起来更好看一点,当一个界面比较复杂的时候,包含了很多控件的时候。分组框就可以把具有关联关系的控件,组织到一起。

核心属性

代码:麦当劳点餐

六、Tab Widget控件

核心属性

核心信号

代码:创建一个程序带有一个TableWidget作为标签页,提供两个按钮,分别创建新的标签页,关闭当前选中的标签页,当切换标签页的时候,也能感知到变化

七、QVBoxLayout的使用

布局管理器,之前把控件放到界面上都是靠手动的方式来布局的。这种手动调整的方式是不科学的。

1、手动布局的方式非常复杂,而且不精确

2、无法对窗口大小进行自适应

Qt种提供了很多种布局管理器,垂直布局,水平布局,网格布局,表单布局。

垂直布局管理器

代码:创建三个按钮,使用垂直布局管理器管理起来。

每个widget种只能设置一个布局管理器

如果我们在代码中创建layout其实是之创建了一个layout,如果在QtDesigner中创建的layout先创建了一个Widget,然后再在这个新的Widget中添加了一个layout

layout标签标识的是布局管理器的本体,外面自动创建除了一个Widget,每个layout里面又可以包含诺干个item(也就是一个按钮)。

刚才是先拖了layout过去,然后再王layout中拖其他控件,也可以先拖其他控件,后给这些控件套上layout。

八、QHBoxLayout的使用

核心属性

代码:

布局管理器之间,也能进行嵌套。

代码:

九、QGridLayout的使用

核心属性

代码:

拉升系数,刚刚创建的布局管理器,这里的控件尺寸都是均等的。当我们需要创建出尺寸不同的控件的时候,就可以通过拉伸系数来设置,拉伸系数就相当于设置控件之间尺寸的比例。

创建6个按钮,使用网格布局按照2*3的方式来排列。

如果拉伸系数设为0,意思是不参与拉伸。此时按钮的宽度是固定值。

 上述代码,直接设置拉伸系数发现是无效的。这里之所以没有拉伸,是因为SizePolicy起到的影响。这个是QWidget的属性。

由于按钮垂直方向默认没有拉伸开(水平方向是默认拉伸的),因此垂直方向不会受到拉伸系数的影响。要想让垂直方向的拉伸系数生效,就需要让按钮先能够拉伸展开。

十、QFormLayout的使用

前端中有一个form标签,搭配其他的input标签,让网页端用户输入数据,并且提交的服务器。

代码:

十一、QSpacerItem的使用

是布局控制器里的控件有一定的间距

核心属性

代码:

上述的每个控件,都是可扩展的,每隔控件都是对应Qt内置的一个类,咱们在代码中都可以基于这个类,继承出你自定义类的子类。在这个自定义子类中,又可以添加很多的属性和方法,实现你自己的需求场景。还可以在子类中,把多个控件组合到一起。


http://www.niftyadmin.cn/n/5683829.html

相关文章

python基础库

文章目录 1.研究目的2.platform库介绍3.代码4.结果展示 1.研究目的 最近项目中需要利用python获取计算机硬件的一些基本信息,查阅资料,.于是写下这篇简短的博客,有问题烦请提出,谢谢-_- 2.platform库介绍 platform 库是 Python 的一个内置库,可以让我们轻松地获取…

前端之render函数的理解

看项目代码的时候,一直会看到一个render函数,不管是react还是vue,那么这个render函数的作用具体是什么呢? 概念 render 函数即渲染函数,它是个函数,它的参数也是个函数——即 createElement 作用 render 函…

yolov8/9/10模型在安全帽、安全衣检测中的应用【代码+数据集+python环境+GUI系统】

yolov8910模型安全帽、安全衣检测中的应用【代码数据集python环境GUI系统】 yolov8/9/10模型在安全帽、安全衣检测中的应用【代码数据集python环境GUI系统】 背景意义 安全帽和安全衣在工业生产、建筑施工等高风险作业环境中是保护工人免受意外伤害的重要装备。然而&#xff0…

vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)

全局守卫 import {createRouter,createWebHashHistory } from vue-router// 省略了routes 中的路由规则 const routes [...... ]const router createRouter({history: createWebHashHistory(),routes })// 全局守卫:登录拦截 本地没有存token,请重新登录 router.…

情感短视频素材下载推荐

在制作热门的情感短视频时,优质的素材是不可或缺的。作为一名资深视频剪辑师,今天我将为你推荐几个可以下载高清无水印情感视频素材的网站,助你轻松找到创作灵感。 蛙学网 蛙学网是国内领先的视频素材平台,专注于情感和治愈类视频…

python测试开发---前后端交互Axios

Axios 是一个基于 Promise 的 HTTP 客户端,常用于浏览器和 Node.js 中发送 HTTP 请求。它封装了 XMLHttpRequest 和 Node.js 的 http 模块,使得处理网络请求更加简单和直观,尤其适合处理异步请求。以下是 Axios 的基础概念和使用方法&#xf…

JavaScript 基础 - 第22天_Webpack模块打包工具

Day03_Webpack模块打包工具 目录 Webpack 简介与体验案例 - 打包注册用户网页插件 plugins 和加载器 loader 的使用案例 - 注册用户完成 - npm 作用在前端项目Webpack 开发服务器,打包模式调试代码 source map配置 路径 学习目标 了解 Webpack 的作用掌握 npm …

Qt_网络编程

目录 1、Qt的UDP Socket 1.1 用Udp实现服务器 1.2 用Udp实现客户端 2、Qt的TCP Socket 2.1 用Tcp实现服务器 2.2 用Tcp实现客户端 3、Qt的HTTP 3.1使用Qt的HTTP 结语 前言: 网络协议是每个平台都必须遵守的,只是不同的平台所提供的网络API不…