使用最基本的QListWidgetItem來創建列表項,
具體使用下面setText、setIcon、addItem這三個方法
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"enum CustomRoles {IdRole = Qt::UserRole, // 存儲IDPhoneRole, // 等價于Qt::UserRole+1,存儲電話EmailRole // 等價于Qt::UserRole+2,存儲郵箱
};MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);for (int i=0;i<15;i++){QListWidgetItem* item=new QListWidgetItem;QIcon b(":/xu/hai/picc/1.jpg");item->setText("dddd");item->setIcon(b);//若所有Item都要存儲一個叫“PhoneRole”字段用于保存電話,一個叫 “EmailRole”字段用于保存郵箱;//不同類型的附加數據需要用不同角色區分item->setData(PhoneRole,i);item->setData(EmailRole,QString("address :%1").arg(i));ui->listWidget->addItem(item);}connect(ui->listWidget, &QListWidget::itemClicked, this, &MainWindow::onListWidgetItemClicked);ui->listWidget->setStyleSheet("QListWidget::item { height: 100px; }");}void MainWindow::onListWidgetItemClicked(QListWidgetItem *item){// 1. 獲取item的文本(setText設置的內容)QString itemText = item->text();qDebug() << "item文本:" << itemText; // 輸出:"dddd"// 2. 獲取自定義數據(setData設置的內容)qDebug() <<item->data(PhoneRole).toString() << item->data(EmailRole).toString();
}
MainWindow::~MainWindow()
{delete ui;
}
自定義個一個widget,然后綁定到qListWidgetItem上
formitem.cpp
#include "formitem.h"
#include "ui_formitem.h"
#include <QListWidget>
#include <QListWidgetItem>
#include "formitem.h"
#include <QDebug>
#include <QString>FormItem::FormItem(QWidget *parent) :QWidget(parent),ui(new Ui::FormItem)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,[=](){qDebug()<<"FormItem neibu :"<<"";emit deleteInvok();});
}FormItem::~FormItem()
{delete ui;
}void FormItem::rec(globalVar* itemData){ui->label->setText(itemData->name);ui->label_2->setText(QString::number(itemData->age));ui->label_3->setText(QString::number(itemData->phone));
}
globalvar.h
#ifndef GLOBALVAR_H
#define GLOBALVAR_H#include <QObject>class globalVar : public QObject
{Q_OBJECT
public:explicit globalVar(QObject *parent = nullptr,QString namee="",int agee=0,int phonee=0);QString name;int age;int phone;
};#endif // GLOBALVAR_H
globalvar.cpp
#include "globalvar.h"globalVar::globalVar(QObject *parent,QString namee,int agee,int phonee) : QObject(parent)
{name=namee;age=agee;phone=phonee;
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "formitem.h"enum CustomRoles {IdRole = Qt::UserRole, // 存儲IDPhoneRole, // 等價于Qt::UserRole+1,存儲電話EmailRole // 等價于Qt::UserRole+2,存儲郵箱
};MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);globalVar* var01=new globalVar(this,"xuhaitao",42,135);listt.append(var01);globalVar* var02=new globalVar(this,"xuhaibing",30,136);listt.append(var02);ui->listWidget->setStyleSheet("QListWidget::item {width:500px; height: 80px; }");for(int i=0;i<listt.size();i++){QListWidgetItem* item=new QListWidgetItem;FormItem * fitem=new FormItem(ui->listWidget);connect(fitem,&FormItem::deleteInvok,[=](){// 先獲取item的索引int row = ui->listWidget->row(item);// 移除并刪除item//刪除 item時 會自動刪除它所關聯的自定義 widget,不需要你額外手動刪除 widgedelete ui->listWidget->takeItem(row);});fitem->rec(listt[i]);ui->listWidget->addItem(item);ui->listWidget->setItemWidget(item,fitem);}
}MainWindow::~MainWindow()
{delete ui;
}