C++客户端Qt开发——常用控件(多元素控件)

5.多元素控件

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

QListWidget QListView QTablewidget QTableview QTreewidget QTreeview

xxWidget和xView之间的区别

以QTableWidget和QTableView为例.

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

①List Widget 纵向列表

属性

说明

currentRow

当前被选中的是第几行

count

一共有多少行

sortingEnable

是否允许排序

isWrapping

是否允许换行

itemAlignment

元素的对齐方式

selectRectVisible

被选中的元素矩形是否可见

spacing

元素之间的间隔

核心方法

方法

说明

addItem(const QString& label)

addItem(QListWidgetItem* item)

列表中添加元素.

currentItem()

返回QListWidgetltem*表示当前选中的元素

setCurrentItem(QListWidgetItem* item)

设置选中第几行元素

setCurrentRow(int row)

在指定的位置插入元素

insertItem(const QString& label,int row)

insertItem(QListWidgetItem *item,int row)

在指定的位置插入元素

item(int row)

返回QListWidgetltem*表示第row行的元素

takeItem(int row)

删除指定行的元素,返回QListWidgetltem*表示是哪个元素被删除了

核心信号

方法

说明

currentltemChanged(QListWidgetltem* current,QListWidgetltem* old)

选中不同元素时会触发.参数是当前选中的元素和之前选中的元素.

currentRowChanged(int)

选中不同元素时会触发.参数是当前选中元素的行数,

itemclicked(QListWidgetltem* item)

点击某个元素时触发

itemDoubleClicked(QListWidgetltem* item)

双击某个元素时触发

itemEntered(QListWidgetltem* item)

鼠标进入元素时触发

在上述介绍中,涉及到一个关键的类,QListwidgetItem

这个类表示QListWidget中的一个元素

核心方法如下,本质上就是一个"文本+图标"构成的

方法

说明

setFont

设置字体

setIcon

设置图标

setHidden

设置隐藏

setSizeHint

设置尺寸

setSelected

设置是否选中

setText

设置文本

setTextAlignment

设置文本对齐方式

①使用ListWidget

#include "widget.h"
#include "ui_widget.h"
# include<QDebug>
#include <QListWidgetItem>
//  注意加头文件,在头文件中也要加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");
}Widget::~Widget()
{delete ui;
}void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{if(current != NULL && previous != NULL){qDebug() << "当前选中:" << current->text()<< "之前选中:" << previous->text();}
}void Widget::on_pushButton_create_clicked()
{//获取到输入框内的内容const QString& text = ui->lineEdit->text();if(text.isEmpty()){return;}ui->listWidget->addItem(text);
}void Widget::on_pushButton_delete_clicked()
{//获取当前被选中的元素int row = ui->listWidget->currentRow();//删除这一行ui->listWidget->takeItem(row);
}

②Table Widget 表格控件

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

核心方法

方法

说明

item(int row,int column)

根据行数列数获取指定的

QTablewidgetItem*

setltem(int row,int column,QTableWidget*)

根据行数列数设置表格中的元素

currentltem()

返回被选中的元素QTableWidgetltem*

currentRow()

返回被选中元素是第几行

currentColumn()

返回被选中元素是第几列

row(QTableWidgetltem*)

获取指定item是第几行

column(QTableWidgetltem*)

获取指定item是第几列

rowCount()

获取行数

columnCount()

获取列数

insertRow(int row)

在第roW行处插入新行

insertColumn(int column)

在第column列插入新列

removeRow(int row)

删除第row行

removeColumn(int column)

删除第column列

setHorizontalHeaderltem(int

column,QTableWidget*)

设置指定列的表头

setVerticalHeaderltem(int row,

QTableWidget*)

设置指定行的表头

核心信号

信号

说明

cellClicked (int row,int column)

点击单元格时触发

cellDoubleClicked(int row,int

column)

双击单元格时触发

cellEntered(int row,int column)

鼠标进入单元格时触发

currentCellChanged(int row,int

column,int previousRow,int

previousColumn)

选中不同单元格时触发

核心方法

方法

说明

row()

获取当前是第几行

column()

获取当前是第几列

setText(const QString&)

设置文本

setTextAlignment(int)

设置文本对齐

setlcon(const Qlcon&)

设置图标

setSelected(bool)

设置被选中

setSizeHints(const QSize&)

设置尺寸

setFont(const QFont&)

设置字体

①使用QTableWidget

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建三行ui->tableWidget->insertRow(0);ui->tableWidget->insertRow(1);ui->tableWidget->insertRow(2);//创建三列ui->tableWidget->insertColumn(0);ui->tableWidget->insertColumn(1);ui->tableWidget->insertColumn(2);//设定列名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("19"));}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_addrow_clicked()
{int rowcount = ui->tableWidget->rowCount();ui->tableWidget->insertRow(rowcount);
}void Widget::on_pushButton_addcolumn_clicked()
{int colcount = ui->tableWidget->columnCount();ui->tableWidget->insertColumn(colcount);//设置列名const QString& name = ui->lineEdit->text();ui->tableWidget->setHorizontalHeaderItem(colcount,new QTableWidgetItem(name));
}void Widget::on_pushButton_deleterow_clicked()
{int rowcount = ui->tableWidget->currentRow();ui->tableWidget->removeRow(rowcount);
}void Widget::on_pushButton_deletecolumn_clicked()
{int curcol = ui->tableWidget->currentColumn();ui->tableWidget->removeColumn(curcol);
}

默认情况下,单元格中的内容直接就是可编辑的

如果不想让用户编辑,可以设置

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

③Tree Widget 树形控件

使用QTreewidget表示一个树形控件.里面的每个元素,都是一个QTreeWidgetItem,每个QTreewidgetItem可以包含多个文本和图标,每个文本/图标为一个列

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

核心方法

方法

说明

clear

清空所有子节点

addTopLevelltem(QTreeWidgetltem* item)

新增顶层节点

topLevelltem(int index)

获取指定下标的顶层节点,

topLevelltemCount()

获取顶层节点个数

indexOfTopLevelltem(QTreeWidgetltem* item)

查询指定节点是顶层节点中的下标

takeTopLevelltem(int index)

删除指定的顶层节点.返回QTreeWidgetltem*表示被删除

的元素

currentltem()

获取到当前选中的节点,返回QTreeWidgetltem*

setCurrentltem(QTreeWidgetltem*item)

选中指定节点

setExpanded(bool)

展开/关闭节点

setHeaderLabel(const QString& text)

设置TreeWidget的header名称.

核心信号

信号

说明

currentltemChanged(QTreeWidgetltem*

current,QTreeWidgetltem*old)

切换选中元素时触发

itemClicked(QTreeWidgetltem*item,int col)

点击元素时触发

itemDoubleClicked(QTreeWidgetltem*item,

int col)

双击元素时触发

itemEntered(QTreeWidgetltem*item,int col)

鼠标进入时触发

itemExpanded(QTreeWidgetltem*item)

元素被展开时触发

itemCollapsend(QTreeWidgetltem*item)

元素被折叠时触发

核心属性

属性

说明

text

持有的文本

textAlignment

文本对齐方式

icon

持有的图表

font

文本字体

hidden

是否隐藏

disabled

是否禁用

expand

是否展开

sizeHint

尺寸大小

selected

是否选中

核心方法

方法

说明

addChild(QTreeWidgetltem* child)

新增子节点

childCount()

子节点的个数

child(int index)

获取指定下标的子节点.返回QTreeWidgetltem'

takeChild(int index)

删除对应下标的子节点

removeChild(QTreeWidgetltem*

child)

删除对应的子节点

parent()

获取该元素的父节点

①使用QTreeWidget

#include "widget.h"
#include "ui_widget.h"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);}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_addtop_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_addclick_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_delect_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);}
}
  1. QTreeWidgetItem* currentitem = ui->treeWidget->currentItem(); 这行代码获取当前在树形控件中选中的节点(QTreeWidgetItem),如果没有任何节点被选中,currentItem() 将返回NULL。
  2. if(currentitem == NULL) { return; } 如果currentitem是NULL,表示没有选中任何节点,所以直接结束函数的执行。
  3. QTreeWidgetItem* parent = currentitem->parent(); 获取当前选中节点的父节点。
  4. if(parent == NULL) { ... } 如果父节点是NULL,表示当前选中的节点是一个顶层节点(即它没有父节点)。
  5. int index = ui->treeWidget->indexOfTopLevelItem(currentitem); 获取顶层节点在树形控件中的索引。
  6. ui->treeWidget->takeTopLevelItem(index); 使用索引从树形控件中移除顶层节点,takeTopLevelItem函数会删除节点并返回它,允许开发者重新使用或删除这个节点。
  7. else { ... } 如果当前节点不是顶层节点,执行else块中的代码。
  8. parent->removeChild(currentitem); 调用父节点的removeChild函数来删除当前选中的子节点。

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

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

相关文章

Django任务管理

1、用django-admin命令创建一个Django项目 django-admin startproject task_manager 2、进入到项目下用命令创建一个应用 cd task_manager python manage.py startapp tasks 3、进入models.py定义数学模型 第2步得到的只是应用的必要空文件&#xff0c;要开始增加各文件实际…

STM32(五):STM32指南者-按键控制灯开关实验

说明&#xff1a;源代码和教程可从野火处下载&#xff0c;本博客为了记录学习过程STM32&#xff08;四&#xff09;&#xff1a;STM32指南者-跑马灯实验的基础上 一、采用轮询方式1、bsp_key.h2、bsp_key.c3、main.c 二、采用中断方式1、bsp_exti.h2、bsp_exti.c3、stm32f10x_i…

AI写作不懂提示词 大象Prompt 保姆级系列教程三

一、提示词的核心价值究竟是啥&#xff1f; 最近跟不少业内朋友探讨这事儿&#xff0c;我觉得&#xff1a;提示词的核心价值在于对方法论的封装以及由此带来的知识传播速度加快。 通俗讲&#xff0c;假如你熟悉的行业里有个厉害的“老师傅”&#xff0c;他在核心业务上有好多心…

jvm 07 GC算法,内存池

01 垃圾判断算法 1.1引用计数算法 最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数&#xff0c;每多一个其他对象引用&#xff0c;计数1&#xff0c; 当引用失效时&#xff0c;计数-1&#xff0c;如果计数0&#xff0c;表示没有其他对象引用&#xff0c;…

架构设计-NX的二次开发API架构设计介绍

1.与整体的关系 2.API设计目标 能够允许用户访问NX的所有UI工具组件&#xff0c;二次开发用户能够编写外观和运行行为类似NX的应用程序。能够允许用户直接访问NX数据模型即使底层数据结构和功能实现发生很大变化&#xff0c;API接口保持稳定&#xff0c;不会影响上层用户。 3…

ARM架构(一)—— ARMV8V9基础概念

目录 1.ARMCore的时间线2.ARM术语小结2.1 A64和arrch642.2ARM架构现在的5个系列2.3 微架构2.4 PE2.5 Banked2.6 ARM文档术语2.7 IMPLEMENTATION DEFINFD 和 DEPRECATED2.8 EL1t和EL1h 3 ARMv7的软件架构4 安全状态切换模型4.1 Secure state和Non-secure state介绍 5 Interproce…

设计师必备:将复杂逻辑做成可视化图表,别说你不会,看过来。

将复杂逻辑做成可视化图可以帮助人们更直观地理解和分析复杂的关系和流程。以下是一般步骤&#xff1a; 1.确定目的&#xff1a; 首先需要明确制作可视化图的目的是什么&#xff0c;是为了展示数据的关系、流程的步骤、还是其他目的。不同的目的会对可视化图的设计和展示方式…

如何在Linux系统上查找以太网卡驱动名称及其版本

说明 目录&#xff1a; 通过dmesg命令查看驱动名称及版本 通过ethtool命令查看驱动名称及版本 通过lshw命令查看驱动名称及版本 要使网卡硬件能够正常的运行&#xff0c;需要在Linux操作系统上提供合适的驱动程序&#xff0c;例如&#xff1a;用于intel网卡的ixgbe驱动。网卡…

FastAPI 学习之路(四十九)WebSockets(五)修复接口测试中的问题

其实代码没有问题&#xff0c;但是我们忽略了一个问题&#xff0c;就是在正常的开发中&#xff0c;肯定是遇到过这样的情况&#xff0c;我们频繁的有客户端链接&#xff0c;断开连接&#xff0c;需要统一的管理这些链接&#xff0c;那么应该如何管理呢。其实可以声明一个类去管…

怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询一、理解复杂排序规则和排序方向二、优化索引…

vue前端实现导出页面为word(两种方法)

将vue页面导出为word文档&#xff0c;不用写模板&#xff0c;直接导出即可。 第一种方法(简单版) 第一步&#xff1a;安装所需依赖 npm install html-docx-js -S npm install file-saver -S第二步&#xff1a;创建容器&#xff0c;页面使用方法 注意&#xff1a;在当前页面引…

Linux进程信号总结

目录 信号入门 生活中的信号 技术应用角度的信号 信号的发送与记录 信号处理常见方式概述 产生信号 通过终端按键产生信号 通过系统函数向进程发信号 由软件条件产生信号 ​编辑 由硬件异常产生信号 阻塞信号 信号其他相关常见概念 在内核中的表示 sigset_t …

输出调节求解跟踪问题(二阶线性系统)

本文研究了一种基于增广系统的领导者-跟随者控制框架&#xff0c;旨在实现跟随者系统对领导者参考信号的精确跟踪。首先&#xff0c;建立了跟随者和领导者的独立状态空间方程&#xff0c;分别描述了它们的动态行为和输出关系。随后&#xff0c;通过将两者的状态空间方程结合成增…

在Windows环境下安装pycharm

Python环境搭建 第一步下载安装python 等待安装完成 验证python是否安装成功 Python开发工具安装部署 JetBrains: Essential tools for software developers and teams PyCharm: the Python IDE for data science and web development 下载社区版本的PyCharm 双击打开下载好的…

【运维资料大全】运维全套资料整理(word原件完整版)

信息安全类、运维类资料整合&#xff1a; 1. 等保测评模板 2. 安全检查表&#xff08;IDS&#xff0c;Linux&#xff0c;数据库&#xff0c;Tomcat&#xff0c;防火墙等&#xff09; 3. 服务器安全巡检表 4. 网络定向攻击风险分析表 5. 应用系统常规检测表 6. 企业漏洞管理50个…

TS 入门(三):Typescript函数与对象类型

目录 前言回顾1. 函数类型a. 基本函数类型b. 可选参数和默认参数c. 剩余参数 2. 对象类型a. 基本对象类型b. 可选属性和只读属性 3. 类型别名和接口a. 类型别名b. 接口扩展 4. 类型推断和上下文类型a. 类型推断b. 上下文类型 扩展知识点&#xff1a;函数重载结语 前言 在前两章…

【银河麒麟操作系统】虚机重启lvs丢失现象分析及处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 环境及现象描述 40台虚机强制重启后&#xff0c;其中8台虚机找不到逻辑卷导致启动异常&#xff0c;后续通过pvcreate 修复重建pv&#xff0c;激活vg和lv并修复…

WSL-Ubuntu20.04训练环境配置

1.YOLOv8训练环境配置 训练环境配置的话就仍然以YOLOv8为例&#xff0c;来说明如何配置深度学习训练环境。这部分内容比较简单&#xff0c;主要是安装miniAnaconda以及安装torch和torchvision. 首先是miniAnaconda的安装(参考官网的教程Miniconda — Anaconda )&#xff0c;执行…

CH552G使用IAP下载

常见下载中的方式ISP&#xff0c;IAP&#xff0c;ICP 参考&#xff0c;CH552G中文手册&#xff0c;参考1 ISP&#xff1a;In System Programing&#xff0c;在系统编程。是常见的&#xff0c;使用软件&#xff0c;先将某个引脚&#xff08;例如boot&#xff09;连接到合适的电…

【笔记】一起齿轮箱的故障和相应的数学模拟实验

1.齿轮箱故障一例 出处&#xff1a;设备的故障识别 GearBox的频谱图&#xff0c;原作者不知道是从哪里拷贝来的&#xff0c;待会儿确认一下。 齿轮啮合频率GMF等于齿数乘以齿轮转速频率&#xff1a; ★齿轮啮合频率两边有边频&#xff0c;间距为1X&#xff08;这是由冲击响应…