有一个结构可以保存原始数据(考虑int)和一个应该可视化这些数据的gui。 Gui部分由几个模型和一些标准视图(表和树)组成。该值应作为字符串或图片呈现,具体取决于用户选择。还有一些额外的困难:在某些情况下,不同元素的文本是不同的 - 即,对于同一列0通常表示" Ok",但对于特定元素,它应打印为"是& #34;,也取决于用户的选择,有些列根本不应该为0值打印文本,将单元格置于空白状态并且不要使表格混乱;接下来,有时单元格应显示两个值 - 例如,当前值和请求 - 类似于"是 - >无&#34 ;.这也适用于用户想要查看图标的情况。
我看到两个选项:
模型自身形成字符串文本并将其存储在某处(在模型项中可能是)。如果需要,该模型还会从基本图标中形成复合图标。在那种情况下,我可以使用标准委托,只需使用标准角色重新实现QAbstractItemModel::data()
方法。
重新实施代表' paint()
方法(实际上我需要重新实现委托,因为我需要像QComboBox这样的自定义编辑器)。委托可以通过paint()
方法中的模型和自定义角色获取所需的任何信息,并形成字符串或复杂图标本身。作为一个子选项,我想,模型可以自己组合所需的信息,比如在Qt :: DisplayRole的std::tuple<int /*value*/, int /*requested value*/, int /*source element type*/, bool /*text or icon*/>
方法中返回data()
。
更新:我想添加一个关于第二个选项的想法。据推测,代表们被介绍来处理代表数据的工作。其中一个后果就是代表们可以给予的灵活性。如果要在某些列中查看原始数字,可以保留默认委托,如果要在单元格中显示一些其他信息,可以为该特定列设置特殊委托。而且似乎你甚至不需要触摸模型或其他东西。