界面数据存储与获取

最后更新于: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; } ````
';