界面数据存储与获取
最后更新于:2022-04-02 02:09:18
[TOC]
## 常见接口
Qt中,可以通过绝大部分已有的接口来存储数据、获取数据。例如:
* 存储数据
* setData()
* setItemData()
* setUserData()
* 获取数据:
* data()
* itemData()
* userData()
> 不同组件会拥有不同存储和获取数据的接口
## 单独存储
```
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, QString("Qter %1").arg(i)); // 用户数据
pItem->setText(QString("Item %1").arg(i)); // 文本
pListWidget->addItem(pItem);
} while (i < 5);
// 连接信号槽
connect(pListWidget, &QListWidget::itemClicked, this, &MainWindow::onItemClicked);
```
监听函数
```
void onItemClicked(QListWidgetItem *item) {
int nID = item->data(Qt::UserRole).toInt(); // 获取用户数据
QString strName = item->data(Qt::UserRole + 1).toString(); // 获取用户数据
qDebug() << "ID : " << nID;
qDebug() << "Name : " << strName;
}
```
## 整体存储
自定义结构
```
struct User {
int nID; // ID
QString strName; // 用户名
};
Q_DECLARE_METATYPE(User)
```
循环 item
```
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();
qDebug() << "ID : " << user.nID;
qDebug() << "Name : " << user.strName;
}
````
';