<学习QT>在QListWidget中实现每个单元项显示文字在上图片在下

  今天要实现一个新的需求,要求一个选图界面的每个单元项以文字在上,图片在下的形式显示。但QListWidget中只有两种搭配,一是文字在下图片在上,二是图片在左文字在右,如下图所示。

  

  查找资料后,受到这位朋友的启发(https://blog.csdn.net/DK29030901065/article/details/50017795?utm_source=blogxgwz5),可以把要呈现的图片和文字转化为图片画在QListWidgetItem,实现代码大概如下。

//文字框高度
const int textHight = 30;

//图片框距左边界距离
const int imgMarin = 20;

//获得图片路径
QString strPath = "./library/1.bmp";

QFileInfo fi(strPath);
if(fi.isFile())
{
    
    //生成图像objPixmap
    QPixmap objPixmap(strPath);
    
    //生成图标对象
    QPixmap iconPixmap(m_W_ICONSIZE,m_H_ICONSIZE);
    iconPixmap.fill(QColor(255,255,255));
    
    // 在图标上生成QPainter对象
    QPainter painter(&iconPixmap);
    
    // 设置画笔颜色
    painter.setPen(QColor(0, 0, 0));
    
    // 设置字体:SimSun、大小15
    QFont font;
    font.setFamily("SimSun");
    font.setPointSize(15);
    painter.setFont(font);
    
    // 定义文本框矩形
    const QRect rectangle = QRect(0, 0, m_W_ICONSIZE, textHight);
    // 绘制文本
    painter.drawText(rectangle, Qt::AlignHCenter, QString("text name"));
    
    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);
    
    // 定义绘图框矩形,画图
    const QRect img_rectangle = QRect(imgMarin, textHight, m_W_ICONSIZE-(2*imgMarin), m_H_ICONSIZE-textHight-imgMarin);
    painter.drawPixmap(img_rectangle, objPixmap);
    
    // 定义绘图框矩形,并画图
    const QRect img2_rectangle = QRect(m_W_ICONSIZE-textHight, 0, textHight, textHight);
    QPixmap objPixmap2(":/image/image/open.png");
    painter.drawPixmap(img2_rectangle, objPixmap2);       
    
    // 为单元项添加图标对象     
    QListWidgetItem *pItem = new QListWidgetItem(QIcon(iconPixmap.scaled(QSize(m_W_ICONSIZE,m_H_ICONSIZE),Qt::KeepAspectRatio,Qt::SmoothTransformation)),QString("0"));
    
    
    // 设置单元项的宽度和高度
    pItem->setSizeHint(QSize(m_W_ICONSIZE,m_H_ICONSIZE));
    ui->listWidget->insertItem(0, pItem);
    
}
        
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值