当前位置: 首页 > news >正文

[Qt][多元素控件]详细讲解

目录

  • 0.前言
  • 1.List Widget
  • 2.Table Widget
  • 3.Tree Widget


0.前言

  • Qt中提供的多元素控件有:
    • 列表
      • QListWidget
      • QListView
    • 表格
      • QTableWidget
      • QTableView
    • 树形
      • QTreeWidget
      • QTreeView
  • WidgetView之间的区别,以QTableWidgetQTableView为例
    • QTableView是基于MVC设计的控件,QTableView⾃⾝不持有数据
      • View只负责实现视图,不负责数据如何存储表示,更不负责数据和视图之间的交互
      • 使⽤QTableView的时候需要⽤⼾创建⼀个Model对象(⽐如QStandardModel),并且把ModelQTableView关联起来
        • 后续修改Model中的数据就会影响QTableView的显⽰
        • 修改QTableView的显⽰也会影响到Model中的数据(双向绑定)
    • QTableWidget则是QTableView⼦类Model进⾏了封装
      • 不需要⽤⼾⼿动创建Model对象,直接就可以往QTableWidget中添加数据
    • 总结View是更底层的实现,Widget是基于View封装而来的

1.List Widget

  • QListWidget能够显⽰⼀个纵向的列表
    • 列表中的每个元素就称为一个Item
    • 每个选项都可以被选中
  • 核心属性
    • currentRow:当前被选中的是第⼏⾏
    • count:⼀共有多少⾏
    • sortingEnabled:是否允许排序
    • isWrapping:是否允许换⾏
    • itemAlignment:元素的对⻬⽅式
    • selectRectVisible:被选中的元素矩形是否可⻅
    • spacing:元素之间的间隔
  • 核心方法
    • addItem(const QString& label) && addItem(QListWidgetItem* item):列表中添加元素
    • currentItem():返回QListWidgetItem*,表⽰当前选中的元素
    • setCurrentItem(QListWidgetItem* item):设置选中的那个元素
    • setCurrentRow(int row):设置选中第⼏⾏的元素
    • insertItem(const QString& label, int row) && insertItem(QListWidgetItem* item, int row):在指定的位置插⼊元素
      • row表示插入完毕之后,新元素在第几行
    • item(int row):返回QListWidgetItem*,表⽰第row⾏的元素
    • takeItem(int row):删除指定⾏的元素,返回QListWidgetItem*表⽰是哪个元素被删除了
  • 核心信号
    • currentItemChanged(QListWidgetItem* current, QListWidgetItem* old):选中不同元素时会触发,参数是当前选中的元素和之前选中的元素
    • currentRowChanged(int):选中不同元素时会触发,参数是当前选中元素的⾏数
    • itemClicked(QListWidgetItem* item):点击某个元素时触发
    • itemDoubleClicked(QListWidgetItem* item):双击某个元素时触发
    • itemEntered(QListWidgetItem* item):⿏标进⼊元素时触发
  • 上述介绍中,涉及到一个关键的类QListWidgetItem
    • 这个类表示QListWidget中的一个元素,本质是"文本+图标"构成的
    • 核心方法
      • setFont:设置字体
      • setIcon:设置图标
      • setHidden:设置隐藏
      • setSizeHint:设置尺⼨
      • setSelected:设置是否选中
      • setText:设置⽂本
      • setTextAlignment:设置⽂本对⻬⽅式

2.Table Widget

  • QTableWidget,表⽰⼀个表格控件
    • ⼀个表格中包含若⼲⾏,每⼀⾏⼜包含若⼲列
    • 表格中的每个单元格,是⼀个QTableWidgetItem对象
  • QTableWidget核心方法
    • item(int row, int column):根据⾏数列数获取指定的QTableWidgetItem*
    • setItem(int row, int column, QTableWidget*):根据行数列数设置表格中的元素
    • currentItem():返回被选中的元素QTableWidgetItem*
    • currentRow():返回被选中元素是第⼏⾏
    • currentColumn():返回被选中元素是第⼏列
    • row(QTableWidgetItem*):获取指定item是第⼏⾏
    • column(QTableWidgetItem*):获取指定item是第⼏列
    • rowCount():获取⾏数
    • columnCount():获取列数
    • insertRow(int row):在第row⾏处插⼊新⾏
    • insertColumn(int column):在第column列插⼊新列
    • removeRow(int row):删除第row
    • removeColumn(int column):删除第column
    • setHorizontalHeaderItem(int column, QTableWidget*):设置指定列的表头
    • setVerticalHeaderItem(int row, QTableWidget*):设置指定⾏的表头
  • QTableWidget核心信号
    • cellClicked(introw,intcolumn):点击单元格时触发
    • cellDoubleClicked(int row, int column):双击单元格时触发
    • cellEntered(int row, int column):⿏标进⼊单元格时触发
    • currentCellChanged(int row, int column, int previousRow, int previousColumn):选中不同单元格时触发
  • QTableWidgetItem:核⼼⽅法
    • row():获取当前是第⼏⾏
    • column():获取当前是第⼏列
    • setText(const QString&):设置⽂本
    • setTextAlignment(int):设置⽂本对⻬
    • setIcon(const QIcon&):设置图标
    • setSelected(bool):设置被选中
    • setSizeHints(const QSize&):设置尺⼨
    • setFont(const QFont&):设置字体

3.Tree Widget

  • QTreeWidget表⽰⼀个树形控件
    • ⾥⾯的每个元素都是⼀个QTreeWidgetItem,每个QTreeWidgetItem可以包含多个⽂本和图标,每个⽂本/图标为⼀个列
    • 可以给QTreeWidget设置顶层节点(顶层节点可以有多个),然后再给顶层节点添加⼦节点,从⽽构成树形结构
  • QTreeWidget核⼼⽅法
    • clear:清空所有⼦节点
    • addTopLevelItem(QTreeWidgetItem* item):新增顶层节点
    • topLevelItem(int index):获取指定下标的顶层节点
    • topLevelItemCount():获取顶层节点个数
    • indexOfTopLevelItem(QTreeWidgetItem* item):查询指定节点是顶层节点中的下标
    • takeTopLevelItem(int index):删除指定的顶层节点,返回QTreeWidgetItem*表⽰被删除的元素
    • currentItem():获取到当前选中的节点,返回QTreeWidgetItem*
    • setCurrentItem(QTreeWidgetItem* item):选中指定节点
    • setExpanded(bool):展开/关闭节点
    • setHeaderLabel(const QString& text):设置TreeWidgetheader名称
  • QTreeWidget核⼼信号
    • currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* old):切换选中元素时触发
    • itemClicked(QTreeWidgetItem* item, int col):点击元素时触发
    • itemDoubleClicked(QTreeWidgetItem* item, int col):双击元素时触发
    • itemEntered(QTreeWidgetItem* item, int col):⿏标进⼊时触发
    • itemExpanded(QTreeWidgetItem* item):元素被展开时触发
    • itemCollapsend(QTreeWidgetItem* item):元素被折叠时触发
  • QTreeWidgetItem核⼼属性
    • text:持有的⽂本
    • icon:持有的图标
    • font:⽂本字体
    • hidden:是否隐藏
    • disabled:是否禁⽤
    • expand:是否展开
    • sizeHint:尺⼨⼤⼩
    • selected:是否选中
  • QTreeWidgetItem核⼼方法
    • addChild(QTreeWidgetItem* child):新增⼦节点
    • childCount():⼦节点的个数
    • child(int index):获取指定下标的⼦节点,返回QTreeWidgetItem*
    • takeChild(int index):删除对应下标的⼦节点
    • removeChild(QTreeWidgetItem* child):删除对应的⼦节点
    • parent():获取该元素的⽗节点

相关文章:

[Qt][多元素控件]详细讲解

目录 0.前言1.List Widget2.Table Widget3.Tree Widget 0.前言 Qt中提供的多元素控件有: 列表: QListWidgetQListView 表格: QTableWidgetQTableView 树形: QTreeWidgetQTreeView Widget和View之间的区别,以QTableWi…...

/var/log/里面的文件具体是什么?linux的登录文件

1,什么是登录文件? linux系统官方对登录文件的定义解释我就不说了,我个人理解登录文件其实就是记录系统活动信息的几个文件,登录文件其实就是系统的日志文件。 比如linux系统默认是不会安装nginx的,nginx的日志为/var…...

JVM知识总结(双亲委派机制)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 双亲委派机制 双亲委派类加载过程 当App尝试加载一个类时&#x…...

YOLOv2:更快更准的目标检测

目录 前言 2.1 简介 2.2 网络结构 2.3 改进方法 2.4 性能表现 前言 自从 You Only Look Once (YOLO) 系列算法问世以来,就以其独特的设计和高效的性能在目标检测领域占据了重要地位。YOLOv1 开创了单阶段检测的新纪元,通过将整个检测过程简化为一个端到端…...

硬件工程师笔面试真题汇总

目录 1、电阻 1)上拉电阻的作用 2)PTC热敏电阻作为电源电路保险丝的工作原理 2、电容 1)电容的特性 2) 电容的特性曲线 3) 1uf的电容通常来滤除什么频率的信号 3、电感 4、二极管 1)二极管特性 2)二极管伏安…...

【vue+marked】marked

一、使用marked 第一步:下载marked和代码块高亮highlight.js npm i markednpm i highlight.jsnpm i markdown-loadernpm i github-markdown-css 第二步:注册并使用 main.js import hljs from "highlight.js"; import "github-markdow…...

无人机之热成像篇

一、定义 无人机热成像技术是指将热成像相机安装在无人机云台上,通过无人机的高空飞行能力和云台的稳定性,结合红外热成像技术对目标区域进行非接触式的温度测量和图像采集。该技术利用物体发出的红外辐射来生成图像,通过测量物体表面温度分布…...

浅谈C/C++指针和引用在Linux和Windows不同环境下的编码风格

目录 0. 前言 1. 代码块、函数体上的 { } 的规范 2. 指针和引用中的 * 和 & 符号的位置 1. Linux 环境下编码风格(gcc) 2. Windows 环境下编码风格(Visual Studio) 3. 简单总结 0. 前言 C/C因为高度的自由性,并没有对一些常见的编码风格进行限制&#…...

【C#】一个项目移动了位置,或者换到其他电脑上,编译报错 Files 的值“IGEF,解决方法

文章目录 1 问题分析2 本文解决方法 一个项目可以正常运行编译的项目,所有路径均为相对路径。 移动了位置,或者换到其他电脑上,编译报错 Files 的值“IGEF, 1 问题分析 这个错误信息表明在处理文件时,Files 的值出…...

代码随想录算法训练营第五十八天|拓扑排序精讲 、dijkstra(朴素版)精讲

拓扑排序 117. 软件构建 from collections import deque, defaultdictdef topological_sort(n, edges):inDegree [0] * n # inDegree 记录每个文件的入度umap defaultdict(list) # 记录文件依赖关系# 构建图和入度表for s, t in edges:inDegree[t] 1umap[s].append(t)# 初…...

【ARM】ULINK Pro如何和SWD接口进行连接调试

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决ULINK Pro和JTAR接口进行连接问题。 2、 问题场景 因为ULINK Pro本身自带的接口是Cortex-M ETM Interface 20-pin Connector。所以无法和JTAR接口直接进行连接。 图2-1 3、软硬件环境 1)、软件版…...

react框架安全设计

react框架安全设计 1、易受攻击的React版本 React库在过去有一些严重性很高的漏洞,因此最好保持稳定版中的最新版本。 2、数据绑定 使用默认的{}进行数据绑定,React会自动对值进行转义以防止XSS攻击。但注意这种保护只在渲染textContent时候有用,渲染 HTML attributes的…...

Kafka生产调优实践。Kafka消息安全性、消息丢失、消息积压、保证消息顺序性

文章目录 搭建Kafka监控平台合理规划Kafka部署环境合理优化Kafka集群配置优化Kafka客户端使用方式合理保证消息安全消费者防止消息重复消费 生产环境常见问题分析消息零丢失方案消息积压如何处理如何保证消息顺序 搭建Kafka监控平台 官网地址 下载efak-web-3.0.2-bin.tar.gz安…...

DDColor部署安装,在服务器Ubuntu22.04系统——点动科技

DDColor图片上色项目的部署安装,在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表:2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有驱动…...

使用 SSL/TLS 加密保障 RocketMQ 的安全传输

引言 在现代分布式系统中,数据传输的安全性至关重要。Apache RocketMQ作为一款高性能、高吞吐量的消息中间件,在许多关键应用场景中被广泛使用。为了确保消息传输的安全性,SSL/TLS 加密提供了一种可靠的解决方案。本文将详细介绍如何在 Rock…...

uni-app开发

参考帖 uniapp官方文档 组件库 项目中肯定需要使用第三方组件库,因为现有的这些不够方便我们去使用 uview: 演示 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 ThorUI: 介绍 | ThorUI文档 创建uni-app项目 有HBuilder…...

2024社招面经_存储DB广告架构方向

总结 第一次社招,主要是三四月份面的,offer的有高德、拼多多、腾讯、美团、快手、携程,后面面的比较累了,因为美团定级和涨幅都还行就去了美团,没再继续面别的。 因为时间比较久了,只在这里贴一下当时有记…...

android10 系统定制:增加应用锁功能

实现效果如下,上锁应用在桌面或最近任务打开弹出解锁界面,需要解锁成功才能打开应用。解锁界面可点击返回或Home键关闭,非上锁应用可直接打开。 基本思路:拦截系统应用启动,判断应用是否在锁住状态,弹出解锁Window。解锁完成后再正常启动应用。分为从桌面启动和最近任务…...

数据结构----队列

一、队列 1)队列定义 队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 允许插入的端是队尾,允许删除的端是队头。队列是一个先进先出(FIFO)的线性表,相应 的也有顺序存储和链式存储两种方式。 2&#…...

【python】实现对文件夹中的图像连续重命名方法

import os import shutildef rename_images(input_folder):# 获取输入文件夹下的所有图片文件(假设都是.jpg格式)image_files [f for f in os.listdir(input_folder) if os.path.isfile(os.path.join(input_folder, f)) and f.endswith(".jpg"…...

【nginx 第一篇章】认识一下 NGINX 服务器

一、简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。由俄罗斯程序员 Igor Sysoev 开发,并在2004年首次公开发布。Nginx 以其高并发处理能力、低内存消耗、稳定性、丰富的功能集、简单的配置以及低学…...

【物联网】(防水篇)哪些电子产品需要通过 IPX7 防水级别测试?

哪些电子产品需要通过 IPX7 防水级别测试? 举例一些可能需要通过 IPX7 防水级别测试的产品 - 电子产品:如智能手机、平板电脑、智能手表、运动手环等,以满足用户在不同场景下的使用需求,例如在潮湿环境或意外沾水时仍能正常工作。…...

高级java每日一道面试题-2024年8月09日-网络篇-什么是XSS攻击如何避免?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是XSS攻击如何避免? 我回答: XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的Web应用程序安全漏洞,攻击者通过在网页中注入恶意脚本,当其他用户浏览这些网页时&…...

Linux时间管理:命令与脚本的完美结合

目录 前言 Linux时间管理命令 date命令 cron定时任务 at命令 sleep命令 脚本与时间命令的结合使用 备份脚本示例 设置cron任务 监控脚本执行时间 结论 致谢 前言 在Linux系统中,时间管理是一项基础而关键的任务。无论是安排周期性的备份、监控任务的执…...

基于ssm+vue+uniapp的微信外卖小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...

lvs(linux virtual server)实例

一.lvs概述 1.1什么是lvs LVS(Linux Virtual Server)是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。LVS主要有两个组…...

Unity游戏开发

Unity游戏开发 系列文章的目录: 第一章:Hello,Unity! “好读书,不求甚解;每有会意,便欣然忘食。” 本文目录: Unity游戏开发 Unity游戏开发前言今天我们来体验一下unity开发创建第一…...

5. MQTT消息类型详解(三)

9 SUBACK消息 9.1 消息结构 SUBACK消息是订阅确认消息,格式如下: ------------------------------- | 消息类型(1字节) | ------------------------------- | 保留标志(1字节) …...

TypeScript JSX

介绍 在线的免费的代码转换器工具:可以把HTML 代码移植到 JSX 语法。还支持很多其他的转换。 JSX 是 ECMAScript 的一种类似 XML 的语法扩展,没有任何定义的语义。它不打算由引擎或浏览器实现。它并不是将 JSX 纳入 ECMAScript 规范本身的提议。它旨在供…...

java里的序列化反序列化、HttpMessageConverter、Jackson、消息转化器、对象转化器...都是啥?

前段时间在学习SSM框架(spring boot、spring MVC、mybatis)后端项目的时候,发现他们的项目里:响应类Result类要实现Serializable接口、转化响应给前端的时间数据的格式要用到什么“消息转换器”MappingJackson2HttpMwssageConvert…...