Qt在QAbstractItemModel

时间:2018-10-24 13:34:37

标签: qt

我有一个包含各种属性的现有对象模型,我想将其包装或将它们的集合重构到QAbstractItemModel中,以便可以轻松地将属性显示为表格。鉴于建模在Qt中是如何工作的,我有点困惑。

据我了解,QAbstractItemModel需要具有基础数据结构(例如向量或映射),并且需要重写接口函数以将其抽象为表。但是,看来,如果我想采用现有模型,则必须将每个列专门硬编码为特定的对象属性。

例如,假设我的模型如下:

class Example {
   QString exampleName;
   QPixmap exampleImage;
   QString exampleDescription;
   uint exampleSequenceId;
   uint exampleExpiration;
}

如果我想将其实现为QAbstractItemModel类,则必须重写必要的函数,并进行硬编码,将exampleName指定为列0,将exampleImage指定为列1,依此类推。

肯定有更清洁的方法吗?我希望在将来更改模型的情况下尽可能避免进行硬编码。尽管我知道这样做是为了保持均匀性,但似乎每一行都有静态名称的代码味道,甚至有一个带有向量支持的模型的代码味道甚至更多。

我正在接近这个权利吗?我看到的唯一可靠的示例涉及一对字符串,例如Qt的TreeView示例。他们似乎都没有钻研实现多列对象模型。

1 个答案:

答案 0 :(得分:0)

也许您会对QTableWidget而不是QTableView感兴趣。 QTableWidget是基于项目的小部件,因此您不需要模型。