【QT】Qt::UserRole的作用
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的作用相关推荐
- QT——Qt QtCreator 官方下载地址
[系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <项目案例分享> <极客DIY开源分享> <嵌入式通用开发实战> <C++语言开发基 ...
- Qt, QT/E, Qtopia 的区别
转自Qt, QT/E, Qtopia 的区别 Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等.由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Q ...
- 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 ...
- QT - QT中配置MSVC编译环境 以及 VS中配置QT开发环境
本文主要记录一下如何在 QT5.14.2 中配置 MSVC2017 构建套件,以及在VS2017中配置QT的开发环境.开发环境为 Win10 + QT5.14.2 + Visual Studio 2 ...
- Qt ui-setupUi(this)的作用
ui->setupUi(this)的作用 ui->setupUi(this); // setupUi(this)是由.ui文件生成的类的构造函数,作用是对界面进行初始化, // 它按照Qt ...
- Qt中parent的作用
Qt中类,如果继承的话,构造函数都会有一个parent参数,例如: MainPanel::MainPanel(QWidget *parent) :QWidget(parent),ui(new Ui:: ...
- OpenGL QT glViewport 函数的作用
函数原型: void glViewport(GLintx, GLinty, GLsizeiwidth, GLsizei height) 函数作用: 改变OpengL描绘结果原点在屏幕的位置及尺寸 参数 ...
- Qt中Q_NULLPTR的作用
在某个大佬编程的代码中看到Q_NULLPTR,查文档查不到它的用处,终于在外国论坛看到讲解,我觉得最合适的解释如下: Q_NULLPTR is a macro,that is replaced as ...
- QT pri 文件的作用
原文地址:https://www.cnblogs.com/wanghuixi/p/9573297.html
最新文章
- catia 工厂设计_SolidWorks、creo、UG哪个更适合机械设计?
- python大神-6年Python大神总结10个开发技巧,80%的人都不会
- 【Java】ArrayList 列表的泛型
- Linux redhat下安装swftools(转载后修改)
- 剑指Offer10- II. 青蛙跳台阶问题
- double在mysql中是什么类型_为什么PVC输送带深受企业的青睐?
- SpringBoot文件上传大小设置(yml中配置)
- INADDR_ANY的确切含义
- aiml java_AIML实现智能聊天机器人
- 马哥linux脚本,马哥全套linux运维教程
- Reflex.XTR-ISO 1CD(模型模拟飞行器)
- linux hotplug 机制,佐须之男的博客- 跟着佐大学Lede/OpenWrt开发入门培训班讲义-18 OpenWrt hotplug 机制分析...
- python爬虫练习2:取道指成分股数据
- latex集合的包含_latex 集合相关符号:实数集,整数集,并,包含,真包含
- 微生物群也有记忆 | 微生物群能被“训练”
- 数字网络监控和传统模拟监控的区别
- 736. Lisp 语法解析 : DFS 模拟题
- HTML网页设计基础——用户注册界面
- /*编写一个程序,使用自定义的swap函数,利用指针作为参数,将两个浮点数变量的值进行交换。*/
- ext4 文件系统的特点、优缺点以及使用场景
热门文章
- Ubuntu 12.04编译mt6582错误 - Tracy Mcgrady的专栏 - 博客频道 - CSDN.NET awk: line 4: function strtonum never def
- 失望电赛........
- 计算机二级word突出显示,计算机二级word真题:调查报告美化排版
- 现代数字通信第八章——阵列信号处理与空域滤波
- bottleneck resnet网络_关于ResNet网络的一点理解(网络结构、building block 及 “bottleneck” building block)...
- 云挖矿怎么玩?99Pool引发矿池行业新思考
- 我差点去当高中老师了
- js 定时器setInterval
- 优秀公共DNS服务器推荐
- 关于 Ajax 有必要取消吗,请求如何取消?