首页 >> 大全

【QT】Qt::UserRole的作用

2023-07-21 大全 27 作者:考证青年

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

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 );

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

给每一个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就会触发对应的事件

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::”来获取数据

这样采用一个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;}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了