Qt中setData()和data()用法

1 篇文章 0 订阅
本文介绍了在Qt编程中如何使用setData()存储用户自定义数据,如ID、名称等,并通过data()函数取出这些数据。示例展示了在QListWidget中为每个列表项设置用户数据,并在点击时通过槽函数读取数据。同时,还展示了如何将整个结构体作为用户数据存储和检索。
摘要由CSDN通过智能技术生成

简述

最近在一个项目要到了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;
}
  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值