一. 效果
使用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時偶爾出現位置偏移問題的解決方法和原理