qt中实现QListWidget列表
使用最基本的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;
}