Qt::UserRole相当于一个索引的作用,对于一些Qt的组件有一个参数位置就需要Qt::UserRole。

void QComboBox::setItemData ( int index, const QVariant & value, int role = Qt::UserRole );
bool QStandardItemModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );

例如使用一个QListWidget,里面有多个QListWidgetItem

给每一个item存放了一些数据

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QListWidget *pListWidget = new QListWidget(this);int i = 0;do {++i;QListWidgetItem *pItem = new QListWidgetItem(pListWidget);pItem->setData(Qt::UserRole, i); // 用户数据pItem->setData(Qt::UserRole+1, i+1000); // 用户数据(取不到)pItem->setData(Qt::UserRole + 1, QString("Qter %1").arg(i)); // 用户数据pItem->setData(Qt::UserRole + 2, QString("取不到 %1").arg(i));pItem->setText(QString("Item %1").arg(i)); // 文本pListWidget->addItem(pItem);} while (i < 5);// 连接信号槽connect(pListWidget, &QListWidget::itemClicked, this, &MainWindow::onItemClicked);
}

当点击到某个item就会触发对应的事件onItemClicked

void onItemClicked(QListWidgetItem *item)
{int nID = item->data(Qt::UserRole).toInt(); // 获取用户数据QString strName = item->data(Qt::UserRole + 1).toString(); // 获取用户数据qDebug() << "UserRole: " << Qt::UserRole;qDebug() << "ID : " << nID;qDebug() << "Name : " << strName;
}

通过存放数据的时候采用的“标识”——“Qt::UserRole”来获取数据

这样采用一个id存放一个基本数据类型(一个用户如果有好多信息那就需要好多id),你可以采用结构体方式把用户数据放在一个结构体中,这样只需要一个id。

// 用户信息struct User : QObjectUserData {int nID; // IDQString strName; // 用户名};// 语言typedef enum{UI_ZH, // 中文UI_EN // 英文} LANGUAGE;Q_DECLARE_METATYPE(User)Q_DECLARE_METATYPE(LANGUAGE)
/*
其中,User定义为QObjectUserData类型,为了后面setUserData()和userData()使用。如果不使用这两个接口,则不需要定义为QObjectUserData。绝大部分存储用户数据的接口都使用的是QVariant,也就是我们常说的“万能变量”。对于自定义数据类型,如果要使用QVariant,就必须使用Q_DECLARE_METATYPE注册。
*/
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;}

【QT】Qt::UserRole的作用相关推荐

  1. QT——Qt QtCreator 官方下载地址

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <项目案例分享> <极客DIY开源分享> <嵌入式通用开发实战> <C++语言开发基 ...

  2. Qt, QT/E, Qtopia 的区别

    转自Qt, QT/E, Qtopia 的区别 Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等.由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Q ...

  3. Qt | Qt For Android、Qt5.14.2安卓开发环境搭建详细步骤

    Qt | Qt For Android.Qt5.14.2安卓开发环境搭建详细步骤 目录 Qt | Qt For Android.Qt5.14.2安卓开发环境搭建详细步骤 1.简介 2.软件下载 1.J ...

  4. QT - QT中配置MSVC编译环境 以及 VS中配置QT开发环境

    本文主要记录一下如何在 QT5.14.2 中配置 MSVC2017 构建套件,以及在VS2017中配置QT的开发环境.开发环境为 Win10 +  QT5.14.2 + Visual Studio 2 ...

  5. Qt ui-setupUi(this)的作用

    ui->setupUi(this)的作用 ui->setupUi(this); // setupUi(this)是由.ui文件生成的类的构造函数,作用是对界面进行初始化, // 它按照Qt ...

  6. Qt中parent的作用

    Qt中类,如果继承的话,构造函数都会有一个parent参数,例如: MainPanel::MainPanel(QWidget *parent) :QWidget(parent),ui(new Ui:: ...

  7. OpenGL QT glViewport 函数的作用

    函数原型: void glViewport(GLintx, GLinty, GLsizeiwidth, GLsizei height) 函数作用: 改变OpengL描绘结果原点在屏幕的位置及尺寸 参数 ...

  8. Qt中Q_NULLPTR的作用

    在某个大佬编程的代码中看到Q_NULLPTR,查文档查不到它的用处,终于在外国论坛看到讲解,我觉得最合适的解释如下: Q_NULLPTR is a macro,that is replaced as ...

  9. QT pri 文件的作用

    原文地址:https://www.cnblogs.com/wanghuixi/p/9573297.html

最新文章

  1. catia 工厂设计_SolidWorks、creo、UG哪个更适合机械设计?
  2. python大神-6年Python大神总结10个开发技巧,80%的人都不会
  3. 【Java】ArrayList 列表的泛型
  4. Linux redhat下安装swftools(转载后修改)
  5. 剑指Offer10- II. 青蛙跳台阶问题
  6. double在mysql中是什么类型_为什么PVC输送带深受企业的青睐?
  7. SpringBoot文件上传大小设置(yml中配置)
  8. INADDR_ANY的确切含义
  9. aiml java_AIML实现智能聊天机器人
  10. 马哥linux脚本,马哥全套linux运维教程
  11. Reflex.XTR-ISO 1CD(模型模拟飞行器)
  12. linux hotplug 机制,佐须之男的博客- 跟着佐大学Lede/OpenWrt开发入门培训班讲义-18 OpenWrt hotplug 机制分析...
  13. python爬虫练习2:取道指成分股数据
  14. latex集合的包含_latex 集合相关符号:实数集,整数集,并,包含,真包含
  15. 微生物群也有记忆 | 微生物群能被“训练”
  16. 数字网络监控和传统模拟监控的区别
  17. 736. Lisp 语法解析 : DFS 模拟题
  18. HTML网页设计基础——用户注册界面
  19. /*编写一个程序,使用自定义的swap函数,利用指针作为参数,将两个浮点数变量的值进行交换。*/
  20. ext4 文件系统的特点、优缺点以及使用场景

热门文章

  1. Ubuntu 12.04编译mt6582错误 - Tracy Mcgrady的专栏 - 博客频道 - CSDN.NET awk: line 4: function strtonum never def
  2. 失望电赛........
  3. 计算机二级word突出显示,计算机二级word真题:调查报告美化排版
  4. 现代数字通信第八章——阵列信号处理与空域滤波
  5. bottleneck resnet网络_关于ResNet网络的一点理解(网络结构、building block 及 “bottleneck” building block)...
  6. 云挖矿怎么玩?99Pool引发矿池行业新思考
  7. 我差点去当高中老师了
  8. js 定时器setInterval
  9. 优秀公共DNS服务器推荐
  10. 关于 Ajax 有必要取消吗,请求如何取消?