简述
最近在一个项目要到了setData()和data()
常见接口
1、**setdata()**存储数据
2、**data()**取出数据
单独存储
1、通过setData(),我们可以单独存储用户数据,使用Qt::UserRole、Qt::UserRole + 1.。。。。
QListWidget *pListWidget = new QListWidget(this);
int i = 0;
for(i = 0; i < 5; ++i )
{
QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
pItem->setData(Qt::UserRole + 1, QString("数据 %1").arg(i)); // 用户数据
pItem->setData(Qt::UserRole + 2, QString("测试 %1").arg(i));
pItem->setText(QString("Item %1").arg(i)); // 文本
pListWidget->addItem(pItem);
}
// 连接信号槽
connect(pListWidget, &QListWidget::itemClicked, this, &Widget::onItemClicked);
槽函数取出数据
void onItemClicked(QListWidgetItem *item) {
int nID = item->data(Qt::UserRole).toInt(); // 获取用户数据
QString strName = item->data(Qt::UserRole + 1).toString(); // 获取用户数据
QString strC = item->data(Qt::UserRole + 2).toString();
qDebug() << "ID : " << nID;
qDebug() << "Name : " << strName;
qDebug() << "strC" << strC;
}
整体存储
也可以通过**setData()**进行整体存储,这时候只需要使用Qt::UserRole即可,把用户数据当成一个结构体来存储。
1、定义一个结构体
//用户信息
struct User : QObjectUserData
{
int nID; //ID
QString strName;//用户名
};
QListWidget *pListWidget = new QListWidget(this);
int i = 0;
do {
++i;
QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
User user;
user.nID = i;
user.strName = QString("Qter %1").arg(i);
pItem->setData(Qt::UserRole, QVariant::fromValue(user)); // 设置用户数据
pItem->setText(QString("Item %1").arg(i));
pListWidget->addItem(pItem);
} while (i < 5);
槽函数
void onItemClicked(QListWidgetItem *item) {
QVariant variant = item->data(Qt::UserRole); // 获取用户数据
User user = variant.value<User>();
qDebug() << "ID : " << user.nID;
qDebug() << "Name : " << user.strName;
}