gpt4 book ai didi

c++ - 返回使用父对象数据的对象,然后使它们无效

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:23 24 4
gpt4 key购买 nike

我正在 Qt 应用程序中实现表格,但在正确设计方面遇到了一些麻烦。

我有两个类(class),TableCell .

Cell具有用于设置单元格属性(例如边框和填充)以及使用 int Cell::row() 获取单元格的行和列的 API和 int Cell::column() .它是一个显式共享类,使用 QExplicitlySharedDataPointer为其数据。它还有一个 isValid()用于查询单元格是否有效的 API。

Table具有用于插入/删除行和列以及合并单元格区域的 API。 Cell可以使用 Table::cellAt(int row, int column) 从表中检索.单元格行保存为 QList<QList<Cell>> .当删除行和列时,删除的单元格被表标记为无效,这会调用 Cell::isValid在从已删除的行/列中返回的任何先前返回的单元格上返回 false。

现在到了棘手的部分:如果您还没有计算单元格的行号和列号,这是一项昂贵的操作,Table::cellAt(int row, int column)方法在 Cell 上显式设置行/列在归还它和 Cell 之前使它们尽可能简单 int成员。这意味着 Cell在查询其行/列时可以快速回复。

但是问题来了;这也意味着 Cell::row() 的值和 Cell::column如果在单元格所在的行/列之前删除/插入行或列,将不正确。

当受影响的单元格所属的实际行/列被删除时,我无法像我所做的那样将受影响的单元格标记为无效。因为稍后有人可能会再次检索带有 cellAt(int, int) 的单元格在该行/列中。该单元格不应无效。

有没有人对这里的更好设计有一些建议?

最佳答案

您可以进行惰性更新。也就是说,不是每次表格更改时都更新单元格的位置信息,而是仅在 Cell:rowCell:column 被调用时更新它上次更新单元格位置的时间。这将需要您在 TableCell 中保留版本标记或其他内容。每次更新表格时,都会更新版本。 Cell::rowCell:column 将首先检查 Cell 的版本是否早于 Table的,如果是,重新计算位置。

与总是重新计算位置或重新计算每次更改相比,这些额外的工作是否值得,我不能说。

关于c++ - 返回使用父对象数据的对象,然后使它们无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6311632/

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