QListWidget自定义item的两种方式(二)——使用QWidget作为item
一. 效果
使用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相关推荐
- EntityFramework Core 2.0自定义标量函数两种方式
前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...
- iOS 自定义layer的两种方式
在iOS中,你能看得见摸得着的东西基本都是UIView,比如一个按钮,一个标签,一个文本输入框,这些都是UIView: 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIVi ...
- Unity中制作自定义字体的两种方式
Unity支持自定义图片字体(CustomFont),网上有很多教程,细节不尽相同,当概括起来基本就是两种方式.一是使用BMFont,导出图集和.fnt文件,再使用图集在Unity中设置得到字体.二是 ...
- 多线程基础-实现多线程的两种方式(二)
实现多线程的两种方式: 1.实现Runnable public interface Runnable {public abstract void run(); }// RunnableTest.jav ...
- springboot过滤字段_SpringBoot自定义过滤器的两种方式及过滤器执行顺序
第一种 @WebFilter + @ServletComponentScan 注解 1.首先自定义过滤器 如下自定义过滤器 ReqResFilter必须实现 javax.servlet.Filter ...
- SpringBoot中使用AMQ的两种方式二(Java配置、注解方式)
使用@JmsListener注解方式 1. 工程目录 2. 引入依赖 <?xml version="1.0" encoding="UTF-8"?> ...
- crontab用法 时间配置_Linux指定的时间运行自定义命令的两种方式
如何在Linux中在指定的时间运行自定义命令 不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统. 由于文件比较大,耗费的时间可能达到小时级别.这时我们可能就会想能 ...
- 8 时间转指定时区的时间_Linux指定的时间运行自定义命令的两种方式
如何在Linux中在指定的时间运行自定义命令 不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统. 由于文件比较大,耗费的时间可能达到小时级别.这时我们可能就会想能 ...
- ROS话题通信中创建自定义数据类型的两种方式
一.在同一个功能包下创建.msg文件 1.在功能包目录下创建msg文件夹 2.在文件夹中创建.msg文件 3.在该功能包的package.xml文件中加入: <build_depend>m ...
- 静态tableview组背景色的更改及自定义cell的两种方式
为什么80%的码农都做不了架构师?>>> 1 修改默认的静态tableview背景色的方法: UITableView *orderTableView = [[UITableVi ...
最新文章
- python中单个下划线是什么意思
- 对FCKEditor = 2.6.4 通杀 exploit 的分析
- Xamarin XAML语言教程构建进度条ProgressBar
- ws配置 zuul_SpringCloud系列研究---服务网关zuul
- PHP中exec()函数执行系统命令失败
- bugzilla与subversion通过scmbug整合
- P2796-Facer的程序【dp】
- Boost智能指针——boost::scoped_ptr(使用及原理分析)
- 船舶定位实时查询系统_港口人员精准定位系统,实时安全管控与智能预警
- ngrok工具的介绍与使用,以及使用此工具时注意的事项
- 第5条:用枚举表示状态、选项、状态码
- React-如何在jsx中自动补全标签(vscode)
- c语言各种头文件函数解释,c语言头文件及其函数
- wifi协议-802
- 怎么两边同时取ln_回归分析为什么要取LN值
- android电子指南针,Android实现电子罗盘(指南针)方向传感器的应用
- CMD控制台光标无法显示
- 生日那天,我失恋了!!
- 为什么你应聘不上或试用期被开?
- 微软拼音打不出中文解决方法