【Qt】常用控件(多元素控件)

目录

  • 一、概述
  • 二、QListWidget
  • 三、QTableWidget
  • 四、QTreeWidget

一、概述

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

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

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

二、QListWidget

QListWidget是一个纵向的列表

属性说明
currentRow当前被选中的行号
count一共有多少行
sortingEnabled是否允许排序
isWrapping是否允许换行
itmeAlignment元素的对齐方式
selectRectVisible被选中的元素矩形是否课可见
spacing元素之间的间隔
additem(const QString&)
addItem(QListWidgetItem*)
列表中添加元素
currentItem返回QListWidgetItem*当前选中的元素
setCurrentItem(QListWidgetItem*)设置选中的元素
setCurrentRow(int)设置选中第几行的元素
insertItem(const QString&,int row)
insertItem(QListWidgetItem* item,int row)
指定位置插入元素
item(int row)返回QItemWidgetItem*表示第row行的元素
takeItem(int row)删除指定行的元素,返回QListWidgetItem* 表示哪个元素被删除

信号

属性说明
currentltemChanged(OListWidgetltem* current,OListWidgetltem*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"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->listWidget->addItem("Cpp");
    ui->listWidget->addItem("rust");
    ui->listWidget->addItem("C#");
    ui->listWidget->addItem("java");


}

Widget::~Widget()
{
    delete ui;
}

//点击添加按钮将数据添加到listwidget中
void Widget::on_pushButton_insert_clicked()
{
    //获取当前输入行中内容
    const QString str = ui->lineEdit->text();
    //将获取的内容添加到listwidget中
    ui->listWidget->addItem(str);
}
//点击删除按钮将listwidget中指定数据删除
void Widget::on_pushButton_delete_clicked()
{
    //获取当前被选中数据的位置
    int pos = ui->listWidget->currentRow();
    if(pos<0)
    {
        //没有指定的情况
        return;
    }
    //删除该位置条目
    ui->listWidget->takeItem(pos);
}

三、QTableWidget

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

属性说明
item(int row, int column)根据行数列数获取指定的 QTablewidgetItem*
setltem(int row, int column,QTableWidget*)根据行数列数设置表格中的元素
currentltem()返回被选中的元素 OTableWidgetltem*
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(intcolumn, QTableWidget*)设置指定列的表头
setVerticalHeaderltem(int row,QTableWidget*)设置指定行的表头

信号

属性说明
cellclicked(int row, int column)点击单元格时触发
cellDoubleClicked(int row, intcolumn)双击单元格时触发
cellEntered(int row, int column)鼠标进入单元格时触发
currentCellChanged(int row,intcolumn,int previousRow, intpreviousColumn)选中不同单元格时触发

QTableWidgetItem 核心方法与QListWidgetItem大致相同

实例:

实现一个表格,插入三行元素

在这里插入图片描述

四、QTreeWidget

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

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

属性说明
clear清除所有子节点
addTopLevelltem(QTreeWidgetltem*item)新增顶层节点
topLevelltem(int index)获取指定下标的顶层节点
topLevelltemCount()获取顶层节点个数
indexOfTopLevelltem(OTreeWidgetltem*item)查询指定节点是顶层节点中的下标
takeTopLevelltem(int index)删除指定的顶层节点.返回 OTreeWidgetltem*表示被删除的元素
currentltem()获取到当前选中的节点,返回 OTreeWidgetltem*
setCurrentltem(OTreeWidgetltem* item)选中指定节点
setExpanded(bool)展开/关闭节点
setHeaderLabel(const OString& text)设置 TreeWidget 的 header 名称

信号

属性说明
currentltemChanged(QTreeWidgetltem* current,OTreeWidgetltem* old)切换选中元素时触发
itemClicked(QTreeWidgetltem* item, int col)点击元素时触发
itemDoubleClicked(QTreeWidgetltem* item,int col)双击元素时触发
itemEntered(QTreeWidgetltem* item, int col)鼠标进入时触发
itemExpanded(OTreeWidgetltem* item)元素被展开时触发
itemCollapsend(QTreeWidgetltem* item)元素被折叠时触发

QTreeWidgetItem 核心属性和方法

属性说明
text持有的文本
textAlignment文本对齐方式
icon持有的图标
font字体
hidden是否隐藏
disabled是否禁用
expand是否展开
sizeHint尺寸大小
selected是否选中
addChild(QTreeWidgetItem*)新增子节点
childCount子节点个数
child(int index)获取指定下标子节点,返回QTreeWidgetItem*
takeChild(int index)删除对应下标子节点
removeChild(QTreeWidgetItem* child)删除对应子节点
parent()获取该元素父节点

实例:
实现一个添加删除元素的TreeWidegt

Column 1Column 2

请添加图片描述

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //修改 标题
    ui->treeWidget->setHeaderLabel("动物");
    //添加顶层元素
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0,"狗");
    ui->treeWidget->addTopLevelItem(item);
    //为顶层元素添加子类
    QTreeWidgetItem* item1=new QTreeWidgetItem();
    item1->setText(0,"中华田园犬");
    item->addChild(item1);
    //为顶层元素添加子类
    QTreeWidgetItem* item2=new QTreeWidgetItem();
    item2->setText(0,"边牧");
    item->addChild(item2);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_insertTopLevelItem_clicked()
{
    //获取输入框内容
    const QString str = ui->lineEdit->text();
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0,str);
    //添加顶层元素
    ui->treeWidget->addTopLevelItem(item);
    //将输入框内容清空
    ui->lineEdit->clear();
}

void Widget::on_pushButton_InsertItem_clicked()
{
    //获取当前选中的
    QTreeWidgetItem* parent = ui->treeWidget->currentItem();
    //获取输入框内容
    const QString str = ui->lineEdit->text();
    QTreeWidgetItem* cur = new QTreeWidgetItem();
    cur->setText(0,str);
    //将当前子类添加
    parent->addChild(cur);
    //输入框内容清空
    ui->lineEdit->clear();
}

void Widget::on_pushButton_DeleteItem_clicked()
{
    //获取当前要删除的item
    QTreeWidgetItem* cur = ui->treeWidget->currentItem();
    if(cur==nullptr)
    {
        //当前要删除的item为空
        return;
    }
    //获取要删除item的父类,针对顶层节点与子节点删除方式不同
    QTreeWidgetItem* parent = cur->parent();
    if(parent==nullptr)
    {
        //为顶层节点
        //获取当前节点位置
        int index = ui->treeWidget->indexOfTopLevelItem(cur);
        //删除顶层节点
        ui->treeWidget->takeTopLevelItem(index);
    }else{
        //子类节点
        parent->removeChild(cur);
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Type-C接口取电解决方案LDR6500

随着科技的不断进步&#xff0c;Type-C接口已经成为现代电子设备中不可或缺的一部分。作为一种全新的接口标准&#xff0c;Type-C以其独特的设计和强大的功能&#xff0c;在数据传输和电力传输领域展现出了巨大的潜力。特别是在取电应用方面&#xff0c;Type-C接口正逐渐改变着…

Linux重点思考(上)--权限/解压/定时任务/性能

Linux重点思考(上&#xff09;--权限/解压/定时任务 权限修改格式chmod使用 打包解压tar -zcvf ab.tar&#xff08;打包&#xff09;tar -xvf ab.tar -C/usr &#xff08;解压&#xff09; 系统防火墙service iptables statussystemctl status iptables区别 定时任务定时任务-c…

SpringBoot2.6.3 + knife4j-openapi3

1.引入项目依赖&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifactId><version>4.5.0</version> </dependency> 2.新增配置文件 import io.swag…

第3集《唯识学概要》

诸位法师慈悲&#xff0c;陈会长慈悲&#xff0c;诸位菩萨&#xff0c;阿弥陀佛&#xff01; 请大家打开讲义第九面。 第九面&#xff0c;它谈到了我们众生的两种缘起。那么佛陀在大乘经典把我们生命的缘起分成两大块&#xff0c;一个是属于一种清净的缘起&#xff0c;一种是属…

【独立开发前线】Vol.26 【独立开发产品】吉光卡片-让你的文字变得酷炫起来

今天给大家分享一下 独立开发前线 社区成员张小吉 的作品 吉光卡片&#xff1b; 这是一款iOS的APP&#xff0c;下载&#xff1a;吉光卡片&#xff0c;主要功能是帮你制作酷炫的文字卡片&#xff0c;用精美的卡片让你的文字生动起来。 展示效果如下&#xff1a; 你可以用它制作…

vite+vue3使用模块化批量发布Mockjs接口

在Vue3项目中使用Mock.js可以模拟后端接口数据&#xff0c;方便前端开发和调试。下面是使用vitevue3使用模块化批量发布Mockjs接口的步骤&#xff1a; 1. 安装Mock.js 在Vue3项目的根目录下&#xff0c;使用以下命令安装Mock.js&#xff1a; npm install mockjs --save-dev …

vue3编写倒计时效果

说明&#xff1a;来自CSDN-问答板块&#xff0c;题主提问。 需求&#xff1a;如何通过表单控制倒计时开始时间&#xff0c;比如设定倒计时五分钟&#xff0c;循环几次&#xff0c;点击开始倒计时按钮&#xff0c;就让他从5分00秒&#xff0c;开始每秒减少&#xff0c;然后到0分…

001搭建前端环境—“01红C”的java项目【苍穹外卖】

整个项目是采用前后端分离的方式开发的 1. 前端工程基于nginx 2. 启动nginx&#xff0c;访问测试 双击 nginx.exe 即可启动 nginx 服务&#xff0c;访问端口号为 80 http://localhost:80

头歌 实验一 关系数据库标准语言SQL湖北汽车工业学院 )

头歌 实验一 关系数据库标准语言SQL 制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01; 目录 头歌 实验一 关系数据库标准语言SQL**制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01;** 第一关&#xff1a;创建数据库第…

AI:155-基于深度学习的股票价格预测模型

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一.基于深度学习的股票价格预测模型 …

基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用

基于STC12C5A60S2系列1T 8051单片机的一个按键长按开关机后一个按键单击长按都增加数值另一个按键单击长按都减少数值应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介…

物流监控升级,百递云·API开放平台助力某电商平台实现高效物流管理

不论是电商平台自身还是消费者&#xff0c;都有着对物流监控的强烈需求。 消费者下单后be like: 每十分钟看一次快递轨迹 放心&#xff0c;电商平台也一样关心物流状态&#xff01;怎样第一时间向用户传递物流状态&#xff1f; 怎么减少重复的提问和投诉&#xff1f;怎样监管…

rhcsa复习4

文件权限 文件的权限针对三类对象进行定义 owner 属主&#xff0c;缩写 u group 属组&#xff0c;缩写 g other 其他&#xff0c;缩写 o 每个文件针对每类访问者定义了三种主要权限 r &#xff1a; Read 读 - 文本文件 cat tac more less head tail paste d ls -l 列…

每天五分钟计算机视觉:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

【公示】2023年度青岛市级科技企业孵化器拟认定名单

根据《青岛市科技企业孵化器管理办法》&#xff08;青科规〔2023〕1号&#xff09;&#xff08;以下简称《管理办法》&#xff09;、《关于开展2023年度市级科技企业孵化器认定申报工作的通知》&#xff0c;经申报受理、区市推荐、形式审查、专家评审及现场核查等程序&#xff…

TSINGSEE青犀智慧工厂视频汇聚与安全风险智能识别和预警方案

在智慧工厂的建设中&#xff0c;智能视频监控方案扮演着至关重要的角色。它不仅能够实现全方位、无死角的监控&#xff0c;还能够通过人工智能技术&#xff0c;实现智能识别、预警和分析&#xff0c;为工厂的安全生产和高效运营提供有力保障。 TSINGSEE青犀智慧工厂智能视频监…

阿里云Salesforce CRM功能差异列表 - Winter‘24

阉割版的阿里云Salesforce由于技术和监管等因素与国际版的Salesforce差距很大&#xff01; 一、Winter‘ 24版差异概况&#xff1a; 1.1. 主要版本&#xff1a; 阿里云上的 Salesforce 提供两个版本&#xff0c;用于生产用途的 CN 版本&#xff08;CN Edition&#xff09;和用…

go-python 库使用详解

1. 引言 在当今软件开发领域&#xff0c;跨语言编程已经成为一种常见的需求。不同的编程语言各自有其优势和适用场景&#xff0c;因此在项目开发过程中&#xff0c;经常需要将多种编程语言进行集成和协作。Go语言&#xff08;简称Go&#xff09;和Python作为两种流行的编程语言…

Windows里Anaconda-Navigator启动后闪退如何解决

前提&#xff1a;已安装Anacond 解决方法 第一步&#xff1a;使用管理员运行&#xff1a;conda prompt 第二步&#xff1a;执行命令 conda update anaconda-navigator (C:\Anaconda3) C:\Users\lenovo> conda update anaconda-navigator Fetching package metadata ......…

Memcached 教程之Memcached介绍(一)

Memcached 教程 Memcached是一个自由开源的&#xff0c;高性能&#xff0c;分布式内存对象缓存系统。 Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用…