gpt4 book ai didi

c++ - 将 QAbstractTableModel 实现与自定义类的 QList 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:53 25 4
gpt4 key购买 nike

我有一个关于QAbstractTableModel 的底层数据源实现的一般性问题。

QAbstractTableModel::data() 函数通过由行值和列值组成的索引访问数据源内容。

如果我的基础数据源是 Person 类的 QList,其中每个成员代表一个列,我如何使用给定的列索引访问其成员?

我能想到的唯一方法是使用一种映射,将列号映射到 Person 类的成员:

QVariant TableModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
{
Person person = mySource[index.row()];

if (index.column() == 0)
return person.getName();
else if (index.column() == 1)
return person.getAdress();
(...and so on..)
}
return QVariant();
}

这是解决这个问题的方法还是有更好的方法?如果我的类(class)有 50 名成员,那将会有很多工作要做。当我通过 QAbstractTableModel::setData() 将数据写入源时,必须做同样的事情。

非常感谢能帮助我理解 Qt 中模型/ View 实现的这一部分的答案或 Material 链接。

最佳答案

Is this the approach to tackle this problem or is there a better one?

当然是一种有效的方法,是的。即使使用 QMetaObject 也没有自省(introspection)功能.

If my class has 50 members that would be a lot of work to do. The same thing must be done, when I write data to the source via QAbstractTableModel::setData().

好吧,您不太可能获得 50 个不同的成员,但在那种情况下,管理您的类(class)本来就很复杂。

Answers or links to material that would help me to understand this part of the model/view implementation in Qt are very much appriciated.

这里没有太多链接,真的。有关详细信息,请参见上文。

关于c++ - 将 QAbstractTableModel 实现与自定义类的 QList 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19205611/

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