使用复杂数据结构进行Qt Model/View编程

3

我不是专业的应用程序开发人员,所以对于模型/视图设计模式可能不太熟悉。尽管如此,我正在尝试在一个业余应用程序中使用它,但却失败了。我遇到的主要问题是,我正在尝试显示和修改的数据不易用QAbstractItemModel的扩展来表示。

我试图封装的数据本质上是一个可增长/可缩小的、可变的整数列表。对于这样的数据,我是否应该放弃模型/视图模式?当数据的“维度”固定时,这种模式似乎更加合适。如果不是这样,是否有一个实现的示例,或者我应该阅读哪些好书呢?

谢谢。

2个回答

3
我会建议您查看QAbstractListModel,它比基本的QAbstractItemModel更相关。
此外,在示例中还有一个不同的模型视图:Puzzle 如果您需要更高层次的Model/View概述,请查看这个链接

这个谜题的例子很有趣,但有点奇怪。你知道为什么作者没有在谜题小部件中使用模型视图模式吗? - Dan O
所以最终我没有采用modelview/pattern。我会像puzzle的作者一样,只有在想要使用现有的QT model类时才实现一个view类。我的原始计划也是创建一个自定义模型。没有自定义模型就意味着暂时没有自定义视图。 - Dan O
只做必要的事情。如果您的模型无法与Qt视图配合使用,请不要尝试让它工作。我相信这个谜题示例没有使用Model/View,因为QAbstractItemView类确实不适合该设计。 - Adam W

0

QAbstractItemModel只是一种实现模型/视图设计模式的方式,虽然有限。如果您发现您的情况不适合它,请不要费力强行使用。

对于您来说,更好的方法可能是使用自己的模型类和视图类,并放弃QAbstractItemModel。这个设计模式比QT中实现的奇怪风格更复杂,而且那种风格只适用于非常特定的应用程序。

我建议您阅读更多相关信息并设计自己的模型-视图设置。如果您自己编写代码,您的类设计很可能会更清晰、更易理解。


我认为如果您想在标准视图(树形、表格等)中使用您的模型,就必须实现QAbstractItemModel。 - Eugene
我考虑过这个问题,但是我在这个项目中真正锻炼的技能是在框架内工作(这在我的“真实”工作中很少见)。 - Dan O
继承并实现QAbstractItemModel(或其派生类之一)是您在(Qt的)框架中工作的方式 :)。 - Eugene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接