在我的项目中,我解析一个NBT数据文件,并根据该文件创建一个QStandardItemModel,然后在QTreeView中显示该文件 . 模型创建得很好,我知道如何在创建时为每个QStandardItem设置某些参数 . 例如,我知道如何设置显示文本和图标 . 有没有办法可以创建“自定义容器”来存储每个项目中的“额外”数据?
从数据文件读取并将其解析为模型我(相信)我可以做得很好 . 但是,用户需要能够在QTreeView中编辑/操作模型 . 这包括 adding and removing items . 这似乎很简单但是,与该项相关的一些数据不会显示在QTreeView中 . 它's kinda... 2817385 until the user tries to edit it. The user needs to double-click on an item to bring up a dialog where they can edit a whole bunch of other parameters and data (Like really long strings and stuff, stuff I can'只是在QTreeView中显示 .
我在寻找一种方法来存储与树中每个项目相关的所有“额外数据”时遇到了很大的困难 . 最初,一个QVector的种类浮现在脑海中,然而操纵模型同时也操纵QVector是一种我无法绕过头脑的技术 .
更糟糕的是,用户需要能够在不同的数据文件(也称为模型)之间切换,同时仍保留对先前数据文件所做的任何编辑 .
有任何想法吗?如果您有任何疑问,请不要犹豫 . 我可以尽可能多地澄清 . :) 谢谢你的时间 .
1 回答
答案是肯定的,您可以存储其他数据 . 你需要
setData()
到具体的user role + 1
. 例如:要获取此数据,请使用
data()
方法和相同的角色 . 要进行编辑,您还可以尝试使用自定义对话框或自定义委托 .QVariant
can use containers,例如QList
或QStringList
,因此您也可以使用容器 . 例如:输出: