Qt中ListWidget控件总结

2024-01-19 15:52
文章标签 总结 qt 控件 listwidget

本文主要是介绍Qt中ListWidget控件总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前提

QListWidget类提供了一个基于项目的列表小部件。

QListWidget是一个方便的类,它提供了一个类似于QListView提供的列表视图,但是具有一个经典的基于项目的接口,用于添加和删除项目。QListWidget使用一个内部模型来管理列表中的每个QListWidgetItem。

对于更灵活的列表视图小部件,使用带有标准模型的QListView类。

那么对于该控件的功能该如何使用呢?

功能

1:风格

QString qsStyle = "QListWidget{color:#333333; background:#f6f9fe; border:0px;}"/*列表项扫过时文本、背景变化*/"QListWidget::item:hover{color:#333333; background:#f6f9fe;}"/**列表项选中*/"QListWidget::item::selected{color:#333333; background:#f6f9fe;}";

 2:插入文本

//插入一条数据
QString qsContent = QStringLiteral("插入一条数据内容");
QListWidgetItem *item = new QListWidgetItem;
item->setText(qsContent);
ui.listWidget->addItem(item);

3:插入自定义控件

假设,有一个QCustomWidget自定义widget需要放入QListWidget控件中,该如何使用呢?

QListWidgetItem *item = new QListWidgetItem;
//创建自定义widget
QCustomWidget *customWidget = new QCustomWidget(this);
/*当前自定义控件的功能设置,这里不一一展示,每个人的要求不一样*/
customWidget->show(); //必须要写show哟~
//将自定义widget插入到列表中
ui.listWidget->addItem(item);
ui.listWidget->setItemWidget(item, customWidget);

问:假设需要点击每个自定义的widget时,响应消息做不同的处理,那么该如何操作呢?

答:我们每往QlistWidget中插入一条自定义信息时,必须要对插入的指针做消息处理

QCustomWidget *customWidget = new QCustomWidget(this);
/*当前自定义控件的功能设置,这里不一一展示,每个人的要求不一样*/
connect(cutomWidget, &QCustomWidget::Msg_SendCustomInfor, this, &QMyWidget::MsgReceivedCustomInfor);
customWidget->show(); //必须要写show哟~

这种方式就会实现每点击一个自定义的item就会触发不同的槽函数。

问:每次插入的自定义widget都响应同一个消息,能分清楚是哪个new出来的widget的触发的吗?

答:这个问题我再刚开始使用的时候也出现过这种情况,那么我们该如何分清楚不同对象触发同一个响应函数呢?

我们在将自定义widget插入到QListWidget中时,需要用一个容器存储创建的自定义指针

std::vector<QCustomWidget*> m_vetWidet;

每在QListWidget中存储一条数据时,就需要在容器中存储new出来的内容

虽然每个QCustomWidget的响应函数都触发:MsgReceivedCustomInfor

但是我们可以在该函数中获取当前正在触发的类指针,怎么样的写法呢?

QCustomWidget* widget = qobject_case<QCustomWidget*>(sender());

当前widget就是当前触发的类指针,我们可以在存储的vector中匹配出对应的类指针,做实际操作。

4:文本对齐方式

该方式只适用于插入文本操作

QString qsContent = QStringLiteral("插入一条数据内容");
QListWidgetItem *item = new QListWidgetItem;
item->setText(qsContent);
/*以下是重点!!!*/
item->setTextAlignment(Qt::AlignLeft|Qt::AlignVenter);
ui.listWidget->addItem(item);

5:添加复选框

在QListWidget控件中有两种添加复选框的方式

第一种:使用内部API实现

实现方式

QString qsContent = QStringLiteral("插入一条数据内容");
QListWidgetItem *item = new QListWidgetItem;
item->setText(qsContent);
item->setTextAlignment(Qt::AlignLeft|Qt::AlignVenter);
/*以下是重点!!!*/
item->setCheckState(Qt::Unchecked); //设置未选中状态
ui.listWidget->addItem(item);

其中,主要的方法是:setCheckState

问:那么,如何获取选中的效果呢?

答:使用QListWidget::itemPressed消息进行处理

void QLearnListWidget::OnListWidgetItemChanged(QListWidgetItem *item)
{//获取当前item的状态Qt::CheckState state = item->checkState();if (state == Qt::Unchecked){//未被选中item->setCheckState(Qt::Checked);}else if (state == Qt::Checked){//选中后取消选中item->setCheckState(Qt::Unchecked);}
}

优点:快捷方便获取

缺点:无法对内部的QCheckBox进行风格设置

第二种:嵌入QCheckBox控件
QString qsContent = QStringLiteral("插入一条数据内容");
QListWidgetItem *item = new QListWidgetItem;
QCheckBox *check = new QCheckBox(qsContent, ui.listWidget);
check->show();
ui.listWidget->addItem(item);
ui.listWidget->setItemWidget(item, check);

上述代码中,需要注意的是:必须先进行addItem,再setItemWidget。否则无法显示文本内容。

优点:可以任意修改checkbox的风格。

缺点:当点击到空白区域时,无法响应QListWidget的消息。因为该条目内被QCheckBox包围,只能对QCheckBox消息处理。

总结

到这里对于QListWidget基本使用已经总结完成了,一般项目中,也是只用到了这些而已,如果还有更为复杂的问题,可以留言告诉我哟~

我是糯诺诺米团,一名C++开发程序媛~

这篇关于Qt中ListWidget控件总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/622919

相关文章

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo