【QT】多元素控件

多元素控件

  • 多元素控件
    • 1. List Widget
    • 2. Table Widget
    • 3. Tree Widget

多元素控件

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

  • QListWidget
  • QListView
  • QTableWidget
  • QTableView
  • QTreeWidget
  • QTreeView

xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例:

  • QTableView 是基于 MVC 设计的控件. QTableView ⾃⾝不持有数据. 使⽤ QTableView 的时候需要⽤⼾创建⼀个 Model 对象 (⽐如 QStandardModel ), 并且把 Model 和 QTableView 关联起来. 后续修改 Model 中的数据就会影响 QTableView 的显⽰; 修改 QTableView 的显⽰也会影响到 Model 中的数据(双向绑定).
  • QTableWidget 则是 QTableView 的⼦类, 对 Model 进⾏了封装. 不需要用户手动创建 Model 对象, 直接就可以往 QTableWidget 中添加数据了.

1. List Widget

使用 QListWidget 能够显示⼀个纵向的列表. 形如:

在这里插入图片描述

核心属性:

在这里插入图片描述

核心方法:

在这里插入图片描述

核心信号:

在这里插入图片描述

在上述介绍中,涉及到⼀个关键的类,QListWidgetItem,这个类表⽰ QListWidget 中的⼀个元素,核心方法如下, 本质上就是⼀个 “⽂本+图标” 构成的。

在这里插入图片描述

代码示例:使用 ListWidget

1)在界⾯上创建⼀个 ListView,右键 => 变形为 => ListWidget ,再创建⼀个 lineEdit 和 两个按钮.

注意: ListWidget 是 ListView 的⼦类,功能⽐ ListView 更丰富,咱们使⽤ ListWidget 即可.

在这里插入图片描述

2)编写 widget.cpp, 在构造函数中添加初始元素

			Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);ui->listWidget->addItem("C++");ui->listWidget->addItem("Java");ui->listWidget->addItem("Python");}

3)编写 listWidget 的 slot 函数

此处需要判定 current 和 previous ⾮空. 初始情况下是没有元素选中的,就导致这俩指针可能是 NULL;这⾥需要给 widget.h 前⾯加上 #include < QListWidgetItem >

			void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous){if(current && previous){qDebug() << "当前选中: " << current->text()<< "之前选中: " << previous->text();}}

4)编写按钮的 slot 函数

			void Widget::on_pushButton_clicked(){// 获取到输入框的内容const QString& text = ui->lineEdit->text();if(text.isEmpty()){return;}ui->listWidget->addItem(text);}void Widget::on_pushButton_2_clicked(){// 获取当前被选中的元素int row = ui->listWidget->currentRow();// 删除这一行ui->listWidget->takeItem(row);}

2. Table Widget

使⽤ QTableWidget 表⽰⼀个表格控件。⼀个表格中包含若⼲⾏,每⼀⾏⼜包含若⼲列。表格中的每个单元格,是⼀个 QTableWidgetItem 对象。

QTableWidget 核心方法:

在这里插入图片描述

在这里插入图片描述

QTableWidgetItem 核心信号:

在这里插入图片描述

QTableWidgetItem 核心方法:

在这里插入图片描述

代码示例:使用 QTableWidget

1)在界⾯上创建 QTableWidget 和 三个按钮,⼀个输⼊框

注意:QTableWidget 是 QTableView 的⼦类,功能⽐ QTableView 更丰富. 咱们使⽤ QTableWidget 即可.

在这里插入图片描述

2)编写 widget.cpp 构造函数,构造表格中的初始数据

			Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);// 创建 3 行ui->tableWidget->insertRow(0);ui->tableWidget->insertRow(1);ui->tableWidget->insertRow(2);// 创建 3 列ui->tableWidget->insertColumn(0);ui->tableWidget->insertColumn(1);ui->tableWidget->insertColumn(2);// 给 3 列设置列名ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("学号"));ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("姓名"));ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("年龄"));// 设置初始数据ui->tableWidget->setItem(0, 0, new QTableWidgetItem("1001"));ui->tableWidget->setItem(0, 1, new QTableWidgetItem("张三"));ui->tableWidget->setItem(0, 2, new QTableWidgetItem("20"));ui->tableWidget->setItem(1, 0, new QTableWidgetItem("1002"));ui->tableWidget->setItem(1, 1, new QTableWidgetItem("李四"));ui->tableWidget->setItem(1, 2, new QTableWidgetItem("21"));ui->tableWidget->setItem(2, 0, new QTableWidgetItem("1003"));ui->tableWidget->setItem(2, 1, new QTableWidgetItem("王五"));ui->tableWidget->setItem(2, 2, new QTableWidgetItem("22"));}

在这里插入图片描述

3)编写按钮的 slot 函数

			void Widget::on_pushButton_addRow_clicked(){// 获取到行数int row = ui->tableWidget->rowCount();// 插入新行ui->tableWidget->insertRow(row);}void Widget::on_pushButton_delRow_clicked(){// 获取到选中行int row = ui->tableWidget->currentRow();// 删除行ui->tableWidget->removeRow(row);}void Widget::on_pushButton_addCol_clicked(){// 获取到列数int col = ui->tableWidget->columnCount();// 插入新列ui->tableWidget->insertColumn(col);// 设置列名const QString& name = ui->lineEdit->text();ui->tableWidget->setHorizontalHeaderItem(col, new QTableWidgetItem(name));}void Widget::on_pushButton_delCol_clicked(){// 获取到选中列int col = ui->tableWidget->currentColumn();// 删除ui->tableWidget->removeColumn(col);}

默认情况下,单元格中的内容直接就是可编辑的。如果不想让⽤⼾编辑, 可以设置

	ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

3. Tree Widget

使⽤ QTreeWidget 表⽰⼀个树形控件。里面的每个元素, 都是⼀个 QTreeWidgetItem , 每个 QTreeWidgetItem 可以包含多个⽂本和图标, 每个⽂本/图标为⼀个 列.

可以给 QTreeWidget 设置顶层节点(顶层节点可以有多个), 然后再给顶层节点添加⼦节点, 从而构成树形结构.

QTreeWidget 核心方法:

在这里插入图片描述

QTreeWidget 核心信号:

在这里插入图片描述

QTreeWidgetItem 核心属性:

在这里插入图片描述

QTreeWidgetItem 核心方法:

在这里插入图片描述

代码示例:使用 QTreeWidget

1)在界⾯上创建⼀个 TreeView , 右键 => 变形为 => TreeWidget , 再创建⼀个 lineEdit 和 两个按钮.

注意: TreeWidget 是 TreeView 的⼦类, 功能⽐ TreeView 更丰富. 咱们使⽤ TreeWidget 即可.

在这里插入图片描述

2)编写代码, 构造初始数据

			Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);ui->treeWidget->setHeaderLabel("动物");QTreeWidgetItem* item1 = new QTreeWidgetItem();item1->setText(0, "猫");ui->treeWidget->addTopLevelItem(item1);QTreeWidgetItem* item2 = new QTreeWidgetItem();item2->setText(0, "狗");ui->treeWidget->addTopLevelItem(item2);QTreeWidgetItem* item3 = new QTreeWidgetItem();item3->setText(0, "鸟");ui->treeWidget->addTopLevelItem(item3);}

在这里插入图片描述

3)编写代码, 实现按钮的 slot 函数

			void Widget::on_pushButton_clicked(){// 获取输入框内容const QString& text = ui->lineEdit->text();if(text.isEmpty()){return;}// 添加到顶层节点中QTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0, text);ui->treeWidget->addTopLevelItem(item);}void Widget::on_pushButton_2_clicked(){// 获取输入框内容const QString& text = ui->lineEdit->text();if(text.isEmpty()){return;}// 获取到当前选中元素QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();if(currentItem == NULL){return;}// 构造新的 itemQTreeWidgetItem* newItem = new QTreeWidgetItem();newItem->setText(0, text);// 添加 item 到选中节点currentItem->addChild(newItem);// 展开父节点currentItem->setExpanded(true);}void Widget::on_pushButton_3_clicked(){// 获取到当前选中节点QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();if(currentItem == NULL){return;}// 获取当前节点的父节点QTreeWidgetItem* parent = currentItem->parent();if(parent == NULL){// 如果是顶层节点int index = ui->treeWidget->indexOfTopLevelItem(currentItem);ui->treeWidget->takeTopLevelItem(index);}else{// 非顶层节点parent->removeChild(currentItem);}}

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

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

相关文章

怎麼解決代理伺服器中的網路延遲問題-okeyproxy

使用代理伺服器時&#xff0c;不可避免地會遇到網路延遲的問題。本文將深入探討代理伺服器中的網路延遲問題&#xff0c;並提出一些解決方案。 什麼是網路延遲&#xff1f; 網路延遲指的是數據從一個點傳輸到另一個點所需的時間&#xff0c;它通常以毫秒&#xff08;ms&#…

数据结构--二叉树相关题2(OJ)

1.比较对称二叉树&#xff08;镜像二叉树&#xff09; 二叉树相关题1中第二题的变形题。先去看1哦&#xff01; 左子树和右子树比较 bool _isSymmetric(struct TreeNode* p, struct TreeNode* q) {if (p NULL && q NULL)return true;//如果两个都为空则是相等的if …

01前端导入

【一】前后端介绍 1.前端&#xff1a;通俗的说就是用户所看到的页面&#xff0c;通过浏览器渲染出来的页面 2.后端&#xff1a;就是对数据进行逻辑校验和加密等操作&#xff0c;用户看不到的操作 【二】浏览器访问地址全流程 1.输入网址--》https://www.baidu.com/域名 2.解…

AI产品经理一篇读透知识图谱(万字深度好文)

1、知识图谱技术综述 知识图谱技术是人工智能技术的组成部分&#xff0c;其强大的语义处理和互联组织能力&#xff0c;为智能化信息应用提供了基础。以下内容涵盖了基本定义与架构、代表性知识图谱库、构建技术、开源库和典型应用。 引言 随着互联网的发展&#xff0c;网络数…

查询进程并且杀死

使用命令行工具 Tasklist 和 Taskkill 来查询和删除&#xff08;终止&#xff09;进程。以下是详细步骤&#xff1a; 查询进程 打开命令提示符&#xff08;以管理员身份运行以获得所有权限&#xff09;。 使用 tasklist 命令列出所有正在运行的进程&#xff1a; tasklist这将…

抖音短视频矩阵系统全攻略:从入门到精通

在数字化时代&#xff0c;短视频已成为连接用户与内容的桥梁。抖音作为短视频领域的领军平台&#xff0c;其影响力不容小觑。抖音短视频矩阵系统的构建和管理&#xff0c;对于希望在这个平台上取得成功的创作者和品牌来说至关重要。本文将提供一份全面的攻略&#xff0c;从入门…

Python|Pyppeteer实现获取携程网“指定城市”特价机票(25)

前言 本文是该专栏的第25篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 本文以携程的城市特价机票为例子,通过pyppeteer登录携程,然后指定两个目标城市(出发城市,目的地到达城市),获取这两个城市之间的特价机票。 需要注意的是,对pyppeteer不太熟悉的…

Qt篇——QLabel固定尺寸的情况下让字体大小自适应并自动换行以完整显示

当文字较少时&#xff0c;默认字体大小为16&#xff1b;当文字内容较多时&#xff0c;自动换行并缩小字体。 举例&#xff1a; 字体较少时 字体较多时 思路&#xff1a; 设置自动换行属性 setWordWrap&#xff1b;通过QFontMetrics计算文字字体要多大、显示多少行才不会超过…

做外贸干一行爱一行,还是干一行厌一行?

记得年轻的时候&#xff0c;每每和同龄人不同行业聊天的时候&#xff0c;大家普遍的感觉就是&#xff1a;自己这一行太苦了&#xff0c;以后有孩子了干什么都不能让他做自己这一行。 和在银行上班的同学聊天&#xff0c;他们最大的苦恼是需要每天开发客户&#xff0c; 让客户在…

【0295】Posgres内核 dynahash table 之 hash_search 实现原理(2)

相关文章: 【0294】Postgres内核 dynahash 之 hash_search 实现原理(1) 0. 前言 在【0294】Postgres内核 dynahash 之 hash_search 实现原理(1) 一文中,从Postgres内核源码角度详细讲解了dynamic hash table中 hash search 的实现原理。 具体内容: 如何确定segment位置…

8、开发与大模型对话的独立语音设备

一、设计原理 该系统的核心部分主要由ESP32-WROVER开发板和ESP32-CAM摄像头、MAX9814麦克风放大器模块、MAX98357功放、声音传感器和SU-03T语音识别芯片构成。通过使用ESP32-WROVER开发板,用户可以实现通过语音与ai进行交互并进行人脸识别。 系统中,从外部输入电源中获取电源…

一手洞悉泰国slot线上游戏投放本土网盟CPI计费广告优势

一手洞悉泰国slot线上游戏投放本土网盟CPI计费广告优势 ​在泰国这个拥有独特文化背景和审美观念的国家&#xff0c;Slots游戏以其丰富的玩法和刺激的体验迅速赢得了玩家们的喜爱。然而&#xff0c;要在竞争激烈的市场中脱颖而出&#xff0c;有效的推广策略显得尤为重要。本土…

HTTP有哪些失败原因?怎么处理?

在网络通信中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;是最常用的协议之一&#xff0c;它支持万维网上的数据交换。然而&#xff0c;在使用HTTP进行数据传输时&#xff0c;可能会遇到各种失败的情况。本文将探讨HTTP请求失败的常见原因&#xff0c;并提供相应的…

【Excel操作】Python Pandas判断Excel单元格中数值是否为空

判断Excel单元格中数值是为空&#xff0c;主要有下面两种方法&#xff1a; 1. pandas.isnull 2. pandas.isna判断Excel不为空&#xff0c;也有下面两种方法&#xff1a; 1. pandas.notna 2. pandas.notnull假设有这样一张Excel的表格 我们来识别出为空的单元格 import panda…

Python酷库之旅-第三方库Pandas(010)

目录 一、用法精讲 22、pandas.read_hdf函数 22-1、语法 22-2、参数 22-3、功能 22-4、返回值 22-5、说明 22-6、用法 22-6-1、数据准备 22-6-2、代码示例 22-6-3、结果输出 23、pandas.HDFStore.put方法 23-1、语法 23-2、参数 23-3、功能 23-4、返回值 23-5…

【Linux】线程(轻量级进程)

目录 一、线程概念 二、线程特性 2.1 进程更加轻量化 2.2 线程的优点 2.3 线程的缺点 2.4 线程的异常 2.5 线程用途 三、进程和线程 四、线程控制 4.1 包含线程的编译链接 4.2 创建线程 4.3 获得线程自身的ID 4.4 线程终止 4.5 线程等待 4.6 线程分离 4.6 线程…

SpringBoot实现Read Through模式

简介 Read Through模式通常是指一种缓存策略&#xff0c;其中当应用程序尝试读取数据时&#xff0c;缓存系统首先被检查以查看数据是否已经存在于缓存中。如果缓存中存在数据&#xff08;即缓存命中&#xff09;&#xff0c;则直接从缓存中读取数据并返回给应用程序。如果缓存…

使用Java构建可靠的分布式缓存系统

使用Java构建可靠的分布式缓存系统 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 分布式缓存系统概述 在现代软件架构中&#xff0c;分布式缓存系统扮演着至关重要的角色&#xff0c;它能够显…

恢复出厂设置后如何从 iPhone 恢复数据

在 iPhone 恢复出厂设置后&#xff0c;所有数据都会被删除&#xff0c;并且 iPhone 将恢复到原始出厂设置&#xff0c;这意味着您的所有 iPhone 数据&#xff0c;包括照片、视频、联系人和应用程序都将消失。 幸运的是&#xff0c;如果您有备份可以恢复&#xff0c;这并不一定…

Leetcode 3208. Alternating Groups II

Leetcode 3208. Alternating Groups II 1. 解题思路2. 代码实现 题目链接&#xff1a;3208. Alternating Groups II 1. 解题思路 这一题同样只需要想明白问题的核心就行了&#xff0c;这道题的核心就在于说找到所有的交替不同的最大字串&#xff0c;假设其长度为n&#xff0…