【QT入门】 QListWidget各种常见用法详解之图标模式

news2024/11/25 10:23:41

往期回顾

【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客

【QT入门】 QTabWidget各种常见用法详解-CSDN博客

【QT入门】 QListWidget各种常见用法详解之列表模式-CSDN博客

【QT入门】 QListWidget各种常见用法详解之图标模式

QListWidget有列表和图标两种显示模式,默认是列表模式,列表模式上方链接已给出,我们现在看图标模式。

enum ViewMode
{
ListMode, //列表模式
IconMode //图标模式
};

学一个新的控件,首先要看他是怎么构造的,其次看怎么用,常用的方法,然后要去看他的信号函数,特别是熟悉常用方法和信号。一般来说ui界面创建和手动代码创建都要学会。 

这里我们先只看纯代码设计。

一、纯代码设计

1、最终效果

2、代码思路

 2.1创建布局

1、我们首先创建水平或者垂直布局,因为只有一个布局,所以哪个都行。

QVBoxLayout* pVLay = new QVBoxLayout(this);
2.2创建listWidget

 2、创建一个listWidget来存放item,注意,是先放listWidgetItem,然后在listWidgetItem里面放Icon

 QListWidget* pLWidget = new QListWidget(this);
2.3设置图标模式

 3、这里需要注意,由于QListWidget默认列表模式,所以我们使用图标模式还需要进行设置,加了才能显示图标

pLWidget->setViewMode(QListView::IconMode);

setViewMode一共就两个参数
enum ViewMode { ListMode, IconMode };列表或者图标模式

2.4设置滑动条

4、设置滑动条,水平滑动条和垂直滑动条,注意用的方法名

 pLWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
 pLWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

控制滑动条的三个参数  

ScrollBarAsNeeded,//需要时显示       
ScrollBarAlwaysOff,//不显示        
ScrollBarAlwaysOn//显示
2.5初始化QIcon和QString对象

5、多个图标用for循环进行加载,先初始化QIcon和QString对象,一个是图标路径,一个是图标名字,这里都是没有new的,直接隐式调用了,

QIcon Icon(":/QListWidget_03/res/vim.png");
QString name = QString("LinFeng00%1").arg(QString::number(i));

同时这里用法要知道,怎么实现把i这个自增参数加到QString对象里面去,而且我是可以多次使用的,比如

QString name = QString("LinFeng%1And%2And%3").arg(QString::number(i)).arg(QString::number(i)).arg(QString::number(i));
 2.6设置QListWidgetIcon

 6、回看第三点,不是直接放Icon在listWidget里面,是先把Icon和name放到QListWidgetIcon里面

QListWidgetItem* pListItem1 = new QListWidgetItem(Icon, name);

2.7设置item宽高 

7、接着对item设置宽高,这里的item宽高,不能说用整体widget的来算,比如整体widget我设置宽600,item宽200,不能说就能放三个,因为除了item本身宽度,还要考虑滑动条宽度等,所以实际需要的widget宽度肯定更大,另外注意每个item之间的margin-right/left是包含在180里面了的

        pListItem1->setSizeHint(QSize(180,180));

        pLWidget->addItem(pListItem1);
2.7添加listWidget 

 8、最后把listWidget加到布局里就欧克

pVLay->addWidget(pLWidget);

另外其实还可以设计样式对整体图标模式样式进行设计,大家可以自行涉及。

3、完整代码示例

代码注释写的还算详细,应该没啥大问题。

QListWidget_03::QListWidget_03(QWidget *parent)
    : QWidget(parent)
{

    resize(800, 500);

    //创建一个垂直布局,其实这里就一个,水平竖直都可以
    QVBoxLayout* pVLay = new QVBoxLayout(this);

    //创建一个listwidget放item
    QListWidget* pLWidget = new QListWidget(this);
    //这行代码很重要,是用来设置显示模式,不加的话,默认是列表模式,加了才能显示图标
    pLWidget->setViewMode(QListView::IconMode);

    //控制滑动条三个参数
    /*
       enum ScrollBarPolicy {
        ScrollBarAsNeeded,//需要时显示
        ScrollBarAlwaysOff,//不显示
        ScrollBarAlwaysOn//显示
    };
    */
    pLWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    pLWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

    //用for循环加载图标
    for (int i = 0; i < 15; i++)
    {
        //先初始化QIcon和QString对象,一个是图标路径,一个是图标名字

        //QIcon的使用,我感觉不是很熟悉
        //QIcon *Icon = new QIcon(":/QListWidget_03/res/vim.png");
         QIcon Icon(":/QListWidget_03/res/vim.png");

         //这里用法要知道,怎么实现把i这个自增参数加到QString对象里面去
        //QString name = QString("LinFeng%1And%2And%3").arg(QString::number(i)).arg(QString::number(i)).arg(QString::number(i));
        QString name = QString("LinFeng00%1").arg(QString::number(i));

        //QListWidgetItem *pListItem1 = new QListWidgetItem(QIcon(":/new/prefix2/res/editor.png"),"editor");
        QListWidgetItem* pListItem1 = new QListWidgetItem(Icon, name);
        //这里的item宽高,不能说用整体widget的来算,比如整体widget我设置宽600,item宽200,不能说就能放三个
       //因为除了item本身宽度,还要考虑滑动条宽度等,所以实际需要的widget宽度肯定更大
        //每个item之间的margin-right/left是包含在180里面了的
        pListItem1->setSizeHint(QSize(180,180));

        pLWidget->addItem(pListItem1);

    }


    pVLay->addWidget(pLWidget);

}

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

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

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

相关文章

在低成本loT mcu上实现深度神经网络端到端自动部署-深度神经网络、物联网、边缘计算、DNN加速——文末完整资料

目录 前言 DNN 量化神经网络 并行超低功耗计算范式 面向内存的部署 结果 原文与源码下载链接 REFERENCES 前言 在物联网极端边缘的终端节点上部署深度神经网络( Deep Neural Networks&#xff0c;DNNs )是支持普适深度学习增强应用的关键手段。基于低成本MCU的终端节点…

Arcgis获取乡镇矢量

现有全中国乡镇矢量边界&#xff08;2023年&#xff09;&#xff0c;如何获取其中的自己所需的子区域&#xff08;一个小镇&#xff09;呢&#xff1f; 可以先去查一下自己的镇代码&#xff0c;我查的是东马圈镇代码 打开分析工具-提取分析-筛选 刚刚记下了FID 验证一下&am…

SpringBoot学习记录

SpringBoot是用于加速Spring开发的。 我们先来看看如何使用SpringBoot来创建一个基于Web的程序&#xff0c;可以发现相较于SpringMVC其有巨大改变。 3.开发控制器类 GetMapping("/{id}")public String getById(PathVariable Integer id){System.out.println("…

关于Linux中的history命令

前言&#xff1a;本文内容为实操学习记录&#xff0c;不具有调研价值&#xff0c;仅供参考&#xff01; 正文&#xff1a; 接触过Linux操作系统的朋友一般都知道history命令&#xff0c;直接输入history命令&#xff0c;会显示当前用户的历史输入记录。这个原理是linux会记录我…

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

Python车道线偏离预警

程序示例精选 Python车道线偏离预警 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python车道线偏离预警》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推…

C语言-printf和scanf的区别详解

fprintf&#xff08;指定的格式写到文件里面。适用于所有的输出流&#xff0c;可以打印在屏幕上面&#xff09;fscanf&#xff08;指定的格式读取出来&#xff0c;适用于所有的输入流&#xff09; fprintf&#xff08;指定的格式写到文件里面&#xff09; 两个函数是一样的 打开…

EasyRecovery2024 安装步骤及功能特色介绍

在数字化时代&#xff0c;数据的重要性不言而喻。无论是个人用户还是企业用户&#xff0c;都可能面临数据丢失的风险。为了应对这一挑战&#xff0c;EasyRecovery作为一款专业的数据恢复软件&#xff0c;成为了越来越多人的选择。 EasyRecovery以其强大的功能和易用的界面&…

关于Kubernetes-v1.23.6-资源调度-StatefulSet-OnDelete当删除的时候才更新

前面提到的普通的滚动更新&#xff0c;都是修改完sts立即就会发生更新操作 而还有一种更新的策略为&#xff0c; OnDelete&#xff0c;即只有在 pod 被删除时会进行更新操作 还是先看一下web这个sts的当前更新策略如下&#xff1a; 这里我们修改&#xff0c;更新策略&#xf…

缓存数据库的意义、作用与种类详解

在现代计算机应用中&#xff0c;数据访问的性能往往是关键因素之一。随着数据量的增加和复杂应用的兴起&#xff0c;数据库的访问成本逐渐成为瓶颈。为了提高应用程序的响应速度、减轻后端数据库的负载压力&#xff0c;缓存数据库应运而生。 什么是缓存数据库&#xff1f; 缓存…

线程与同步

目录 一&#xff0c;线程概念 1&#xff0c;什么是线程 2&#xff0c;Linux 下的线程 3&#xff0c;POSIX 线程库 二&#xff0c;线程同步 1&#xff0c;数据不一致问题 2&#xff0c;如何解决这类问题 3&#xff0c;死锁 三&#xff0c;线程同步的运用 1&#xff0c…

知识图谱与大数据:区别、联系与应用

目录 前言1 知识图谱1.1 定义1.2 特点1.3 应用 2 大数据2.1 定义2.2 应用 3. 区别与联系3.1 区别3.2 联系 结语 前言 在当今信息爆炸的时代&#xff0c;数据成为了我们生活和工作中不可或缺的资源。知识图谱和大数据是两个关键概念&#xff0c;它们在人工智能、数据科学和信息…

Java基础之算数运算符的初级用法

运算符 运算符: 对字面量或者变量进行操作的符号 表达式: 用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式 不同运算符连接的表达式体现的是不同类型的表达式 一 .算数运算符 实践一下 加 减 乘 运行结果: 除 取模 运行结果 练习: 数值拆分 需求…

P5210A泰克P5210A高压差分探头

181/2461/8938产品概述&#xff1a; P5210A 是 Tektronix 的差分探头。差分探头是具有两个输入的有源探头。负输入和正输入连同驱动 50 欧姆电缆的地线以传输数字示波器通道的输出 泰克 P5210A 特性&#xff1a; 带宽&#xff1a;50 兆赫 差分电压&#xff1a;1000X&#xf…

LLMs之Grok-1.5:Grok-1.5的简介、安装和使用方法、案例应用之详细攻略

LLMs之Grok-1.5&#xff1a;Grok-1.5的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;xAI公司在不久前发布了Grok-1模型以及模型结构&#xff0c;揭示了公司到去年11月为止在大语言模型研发上的进步。2024年3月28日(美国时间)&#xff0c;xAI以“迅雷不及掩耳之势…

Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions(IA-YOLO)

1、总体概述 基于深度学习的目标检测在常规条件的数据集可以获得不错的结果&#xff0c;但是在环境、场景、天气、照度、雾霾等自然条件的综合干扰下&#xff0c;深度学习模型的适应程度变低&#xff0c;检测结果也随之下降&#xff0c;因此研究在复杂气象条件下的目标检测方法…

为什么要学Python?Python的优势在哪?

人生苦短&#xff0c;我用 Python 不知道从什么时候开始流行这句话 Python 是个什么神仙编程语言 为啥全世界都在鼓励孩子学 Python 简单容易上手 国内、国际的竞赛机会多&#xff0c;含金量足 Python 好就业、薪资高 下面且看详细分析 01 什么是Python / 科技编程老师…

变分信息瓶颈

变分信息瓶颈和互信息的定义 1 变分信息瓶颈 定义&#xff1a;变分信息瓶颈&#xff08;Variational Information Bottleneck&#xff09;是一种用于学习数据表示的方法&#xff0c;它旨在通过最小化输入和表示之间的互信息来实现数据的压缩和表示学习。这种方法通常用于无监…

安装docker 并搭建出一颗爱心树

1、docker介绍 Docker 是⼀个开源的容器运⾏时软件&#xff08;容器运⾏时是负责运⾏容器的软件&#xff09;&#xff0c;基于 Go 语 ⾔编写&#xff0c;并遵从 Apache2.0 协议开源。 Docker可以让开发者打包⾃⼰的应⽤以及依赖到⼀个轻量的容器中&#xff0c;然后发布到任何…

代码随想录训练营Day36:● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

435. 无重叠区间 题目链接 https://leetcode.cn/problems/non-overlapping-intervals/description/ 题目描述 思路 直接统计重叠区间的个数&#xff0c;就是需要删除的个数 public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,b)-> Intege…