gpt4 book ai didi

c++ - 在 QStandardItemModel/QTreeView 中操作数据?

转载 作者:行者123 更新时间:2023-11-30 01:50:19 25 4
gpt4 key购买 nike

在我的项目中,我解析了一个数据文件并基于该文件创建了一个 QStandardItemModel,然后该文件显示在 QTreeView 中。模型创建得很好,我知道如何在创建每个 QStandardItem 时设置某些参数。例如,我知道如何设置显示文本和图标。有没有一种方法可以创建“自定义容器”以在每个项目中存储“额外”数据?

读取数据文件并将其解析为模型我(相信)我可以做得很好。然而,用户需要能够从 QTreeView 中编辑/操作模型。这包括添加和删除项目。这看起来很简单,但是,与该项目关联的一些数据未显示在 QTreeView 中。它有点……“隐藏”,直到用户尝试对其进行编辑。用户需要双击一个项目来打开一个对话框,他们可以在其中编辑一大堆其他参数和数据(比如很长的字符串和东西,我不能只在 QTreeView 中显示的东西)。

我在尝试找到一种方法来存储与树中每个项目相关的所有“额外数据”时遇到了很大的困难。最初,我想到了某种 QVector,但是在操纵模型的同时还操纵 QVector 是一种我无法理解的技术。

更糟糕的是,用户需要能够在不同的数据文件(又名模型)之间切换,同时仍然保留对先前数据文件所做的任何编辑。

有什么想法吗?如果您有任何问题,请随时提出。我可以尽可能多地澄清。 :)感谢您的宝贵时间。

最佳答案

答案是肯定的,您可以存储额外的数据。您需要将 setData() 设置为特定的 user role + 1。例如:

view->model()->setData(someIndex,"New Data", Qt::UserRole + 1);

要获取此数据,请使用 data() 方法和相同的角色。要对此进行编辑,您还可以尝试使用自定义对话框或自定义委托(delegate)。

QVariant can use containers例如 QListQStringList,因此您也可以使用容器。例如:

auto in = ui->tableView->model()->index(0,0);
QList<QVariant> lst;
lst << "one" << "two" << "three";
view->model()->setData(in,QVariant(lst),Qt::UserRole+1);
//...
qDebug() << "output:"<<view->model()->data(in,Qt::UserRole+1).toList();

输出:

output: (QVariant(QString, "one") , QVariant(QString, "two") , QVariant(QString, "three") )

关于c++ - 在 QStandardItemModel/QTreeView 中操作数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27614110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com