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_OBJECT

public:
    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_OBJECT

public:
    explicit CMainWidget(QWidget *parent = 0);
    ~CMainWidget();

private:
    Ui::CMainWidget *ui;

    //添加Item
    void 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时偶尔出现位置偏移问题的解决方法和原理

 

 

 

  • 20
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值