一. 效果

使用QWidget作为QListWidget的Item,测试程序效果如下(下面内容包含测试程序源代码):

二. 步骤

使用QWidget作为QListWidget的Item的步骤如下

1. 定义要作为QListWidget的Item的自定义的QWidget

class CItemWidget : public QWidget

2. 创建自定义的QWidget并和QListWidget的Item关联起来

CItemWidget* pItemWidget = new CItemWidget(this);
QListWidgetItem* pItem = new QListWidgetItem();
pItem->setSizeHint(QSize(350, 40));
ui->listWidget->addItem(pItem);
ui->listWidget->setItemWidget(pItem, pItemWidget);

注意:如果要QListWidget的每行显示多个自定义的QWidget,则需进行下面的设置

ui->listWidget->setResizeMode(QListView::Adjust);
ui->listWidget->setViewMode(QListView::IconMode);

三. 测试程序及效果

ItemWidget.h

#ifndef ITEMWIDGET_H
#define ITEMWIDGET_H#include <QWidget>namespace Ui {
class CItemWidget;
}class CItemWidget : public QWidget
{Q_OBJECTpublic:explicit CItemWidget(QWidget *parent = 0);~CItemWidget();//设置数据void SetData(const QString& qstrFileName, int iFileSize, const QString& qstrPic);private:Ui::CItemWidget *ui;};#endif // ITEMWIDGET_H

ItemWidget.cpp

#include "ItemWidget.h"
#include "ui_ItemWidget.h"CItemWidget::CItemWidget(QWidget *parent) :QWidget(parent),ui(new Ui::CItemWidget)
{ui->setupUi(this);
}CItemWidget::~CItemWidget()
{delete ui;
}void CItemWidget::SetData(const QString& qstrFileName, int iFileSize, const QString& qstrPic)
{ui->label_fileName->setText(qstrFileName);ui->label_fileSize->setText(QString::number(iFileSize));QPixmap pixmapPic(qstrPic);int iWidth = ui->label_pic->width();int iHeight = ui->label_pic->height();QPixmap pixmapPicFit = pixmapPic.scaled(iWidth, iHeight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);//饱满填充ui->label_pic->setPixmap(pixmapPicFit);
}

MainWidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include <QWidget>namespace Ui {
class CMainWidget;
}class CMainWidget : public QWidget
{Q_OBJECTpublic:explicit CMainWidget(QWidget *parent = 0);~CMainWidget();private:Ui::CMainWidget *ui;//添加Itemvoid AddItem(const QString& qstrFileName, int iFileSize, const QString& qstrPic);
};#endif // MAINWIDGET_H

MainWidget.cpp

#include "MainWidget.h"
#include "ui_MainWidget.h"
#include "ItemWidget.h"CMainWidget::CMainWidget(QWidget *parent) :QWidget(parent),ui(new Ui::CMainWidget)
{ui->setupUi(this);ui->listWidget->setResizeMode(QListView::Adjust);ui->listWidget->setViewMode(QListView::IconMode);AddItem("Video1", 1024, ":/images/video_1.png");AddItem("Video2", 2048, ":/images/video_2.png");AddItem("Video3", 3072, ":/images/video_3.png");AddItem("Video4", 4096, ":/images/video_4.png");AddItem("Video5", 5120, ":/images/video_1.png");
}CMainWidget::~CMainWidget()
{delete ui;
}void CMainWidget::AddItem(const QString& qstrFileName, int iFileSize, const QString& qstrPic)
{CItemWidget* pItemWidget = new CItemWidget(this);pItemWidget->SetData(qstrFileName, iFileSize, qstrPic);QListWidgetItem* pItem = new QListWidgetItem();pItem->setSizeHint(QSize(350, 40));ui->listWidget->addItem(pItem);ui->listWidget->setItemWidget(pItem, pItemWidget);
}

main.cpp

#include "MainWidget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);CMainWidget w;w.show();return a.exec();
}

程序运行效果如下:

相关资料:

QListWidget自定义item的两种方式(一)——使用Delegate

自定义QWidget作为QListWidget的Item时偶尔出现位置偏移问题的解决方法和原理

QListWidget自定义item的两种方式(二)——使用QWidget作为item相关推荐

  1. EntityFramework Core 2.0自定义标量函数两种方式

    前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...

  2. iOS 自定义layer的两种方式

    在iOS中,你能看得见摸得着的东西基本都是UIView,比如一个按钮,一个标签,一个文本输入框,这些都是UIView: 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIVi ...

  3. Unity中制作自定义字体的两种方式

    Unity支持自定义图片字体(CustomFont),网上有很多教程,细节不尽相同,当概括起来基本就是两种方式.一是使用BMFont,导出图集和.fnt文件,再使用图集在Unity中设置得到字体.二是 ...

  4. 多线程基础-实现多线程的两种方式(二)

    实现多线程的两种方式: 1.实现Runnable public interface Runnable {public abstract void run(); }// RunnableTest.jav ...

  5. springboot过滤字段_SpringBoot自定义过滤器的两种方式及过滤器执行顺序

    第一种 @WebFilter + @ServletComponentScan 注解 1.首先自定义过滤器 如下自定义过滤器 ReqResFilter必须实现  javax.servlet.Filter ...

  6. SpringBoot中使用AMQ的两种方式二(Java配置、注解方式)

    使用@JmsListener注解方式 1. 工程目录 2. 引入依赖 <?xml version="1.0" encoding="UTF-8"?> ...

  7. crontab用法 时间配置_Linux指定的时间运行自定义命令的两种方式

    如何在Linux中在指定的时间运行自定义命令 不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统. 由于文件比较大,耗费的时间可能达到小时级别.这时我们可能就会想能 ...

  8. 8 时间转指定时区的时间_Linux指定的时间运行自定义命令的两种方式

    如何在Linux中在指定的时间运行自定义命令 不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统. 由于文件比较大,耗费的时间可能达到小时级别.这时我们可能就会想能 ...

  9. ROS话题通信中创建自定义数据类型的两种方式

    一.在同一个功能包下创建.msg文件 1.在功能包目录下创建msg文件夹 2.在文件夹中创建.msg文件 3.在该功能包的package.xml文件中加入: <build_depend>m ...

  10. 静态tableview组背景色的更改及自定义cell的两种方式

    为什么80%的码农都做不了架构师?>>>    1 修改默认的静态tableview背景色的方法: UITableView *orderTableView = [[UITableVi ...

最新文章

  1. python中单个下划线是什么意思
  2. 对FCKEditor = 2.6.4 通杀 exploit 的分析
  3. Xamarin XAML语言教程构建进度条ProgressBar
  4. ws配置 zuul_SpringCloud系列研究---服务网关zuul
  5. PHP中exec()函数执行系统命令失败
  6. bugzilla与subversion通过scmbug整合
  7. P2796-Facer的程序【dp】
  8. Boost智能指针——boost::scoped_ptr(使用及原理分析)
  9. 船舶定位实时查询系统_港口人员精准定位系统,实时安全管控与智能预警
  10. ngrok工具的介绍与使用,以及使用此工具时注意的事项
  11. 第5条:用枚举表示状态、选项、状态码
  12. React-如何在jsx中自动补全标签(vscode)
  13. c语言各种头文件函数解释,c语言头文件及其函数
  14. wifi协议-802
  15. 怎么两边同时取ln_回归分析为什么要取LN值
  16. android电子指南针,Android实现电子罗盘(指南针)方向传感器的应用
  17. CMD控制台光标无法显示
  18. 生日那天,我失恋了!!
  19. 为什么你应聘不上或试用期被开?
  20. 微软拼音打不出中文解决方法

热门文章

  1. KinectSDK + Unity3D学习总结
  2. 2022 最新 Memcached 面试题
  3. JavaScript系列之条件运算符
  4. Flixel Dame 坦克大战(二)Dame-editor使用指南
  5. 用SVM预测股票涨跌 - 免费分享全套代码
  6. docker的常用命令(镜像、容器常用操作)
  7. 四月Google份额继续上升 微软收购雅虎势在必行
  8. 网络互连(IPV4+NAT技术+ARP+IPV6)
  9. 如何将PDF转换成word文档
  10. 牛客真题编程——day16