QT中QListWidget实现QListWidgetItem图片和文字居中

简介: 在使用QT开发软件的过程中,很多时候使用QListWidget来实现列表项的功能,比如MS系统的功能模块菜单,如下面2张图所示,其中第一张图是带文字和图标的列表项,第二张图是纯图标的模式,在最近开发的平台客户端的某个功能模块都用上了。

说明

在使用QT开发软件的过程中,很多时候使用QListWidget来实现列表项的功能,比如MS系统的功能模块菜单,如下面2张图所示,其中第一张图是带文字和图标的列表项,第二张图是纯图标的模式,在最近开发的平台客户端的某个功能模块都用上了。

a5fb7e4b6f3283e3239fc481ea1a5915_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FiY2Q1NTIxOTE4Njg=,size_16,color_FFFFFF,t_70#pic_center.png

50f2d514b0e8b4b2eb71d00ff3cdc7a6_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FiY2Q1NTIxOTE4Njg=,size_16,color_FFFFFF,t_70#pic_center.png


列表项实现过程

在实现的过程中,参考了另外一位博主的博客( 利用QListWidget实现简单的播放器界面.),所以我这里就没有过多的介绍如何实现的了,大家看了那边博客就能实现QListWeiget项图标居中的样式了,写这篇博客就是为了大家能链接过去,可能有时候搜索不到那片博客。实现图标居中也是利用了最关键的函数:

`void  QListWidget::setItemWidget(QListWidgetItem * item, QWidget * widget);`

这个函数的主要作用就是将某个widget赋予给其中的一项(这样我们就可以将一项设置为我们想要的内容,毕竟widget是一个容器,啥都能装,还能在里面布局),而使用QListWidget的addItem函数一般就是仅仅添加项目的标题,其中添加QListWidget的一项是一个QListWidgetItem类,QListWidgetItem类使用以下函数可以设置图标,但是设置图标默认是居左的,并没有类似 setTextAlignment的方法使文字居中的方法。

void setIcon(const QIcon &icon);

相信说到这,大家也去看了以上实现播放器的方法,也能够实现图标居中或者任意的位置,只要我们对setItemWidget方法的widget布局,让其居中就能实现图标居中,如果觉得链接的博客的代码有点多,以下我就模仿写了最核心的一段代码,将这段代码随便拷贝到你们的电脑运行就可以,图片路径换上就可以了,另外weight布局可以按照自己的需要进行布局。

void MainWindow::init()//初始化元素
{
  QWidget *itemWidget = new QWidget(ui->listWidget); 
  QGridLayout *itemLayout = new QGridLayout;    
  QHBoxLayout *itemContentLayout = new QHBoxLayout;    
  QLabel *lblPicture = new QLabel("");    
  QPixmap icon(":/images/消防.png");   
  lblPicture->setPixmap(icon);  
  QLabel *lblContent = new QLabel("模块名称");   
  itemContentLayout->addWidget(lblPicture,1);//图片控件占1列
  itemContentLayout->addWidget(lblContent,4);//文字占4列   
  itemLayout->addWidget(new QLabel(),1,1,1,5);   
  itemLayout->addLayout(itemContentLayout,1,6,1,10);    
  itemLayout->addWidget(new QLabel(),1,17,1,7);    
  itemWidget->setLayout(itemLayout);   
  QListWidgetItem *item = new QListWidgetItem(ui->listWidget);   
  item->setSizeHint(QSize(40,40));       
  ui->listWidget->setItemWidget(item,itemWidget);
}

运行结果如下:

c4ea8bdef0ffa601710ab85cbe78b5c1_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FiY2Q1NTIxOTE4Njg=,size_16,color_FFFFFF,t_70#pic_center.png


题外话

既然有setItemWidget这个函数,那么当然对应的ItemWidget函数,那么是不是可以通过这个函数获取我们存储每一项对应的Widget,然后对其中的元素进行操作,是不是就可以实现对应元素的美化功能呀,比如按下时,图标的切换,背景的切换等

噗~~~ 这个一项一项的离我们最开始给的图还有点距离呀,如果要实现说明那2张图的样式,还有很多工作需要做,比如布局的使用,标题栏的美化,使用QT进行界面开发,还是比MFC容易多了,毕竟QT提供了很多现成的界面库供我们使用。

PS:我也是刚刚学习QT不久,借学习的机会顺便写了一个简单的消防模块(主要功能有文件的上传与下载,短信功能,消息提醒,视频播放等子功能),以下是主界面截图,花了差不多30多个工作日呢,忏愧呀,如果你是一位新手,可以留言共同谈论QT的相关问题呀

3283935e33f1e84fe63308ad3c23f039_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FiY2Q1NTIxOTE4Njg=,size_16,color_FFFFFF,t_70#pic_center.png

相关文章
|
2月前
|
计算机视觉 C++
基于Qt的简易图片浏览器设计与实现
基于Qt的简易图片浏览器设计与实现
100 1
|
7天前
Qt绘图(线条、椭圆、矩形、图片滚动)
Qt绘图(线条、椭圆、矩形、图片滚动)
11 3
|
13天前
|
算法 计算机视觉
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
16 0
|
2月前
|
数据库 开发者 Windows
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-2
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
2月前
|
XML 设计模式 JSON
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-1
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
2月前
【qt】QListWidget 组件3
【qt】QListWidget 组件
11 0
|
2月前
【qt】QListWidget 组件2
【qt】QListWidget 组件
29 0
|
2月前
【qt】QListWidget 组件1
【qt】QListWidget 组件
21 0
|
9月前
解锁Qt QListWidget的全部潜力——用最佳实践和技巧赢得用户的喜爱和赞誉!
解锁Qt QListWidget的全部潜力——用最佳实践和技巧赢得用户的喜爱和赞誉!
|
2月前
|
存储 C++ 开发者
QT基础【4-简易的图片查看程序】
QT基础【4-简易的图片查看程序】