2009-09-27 274 views
8

我对重置或清除与QAbstractItemModel关联的数据的正确方法有点困惑。我正在编写一个应用程序,用户可以用一组新数据(空或小)重新开始。在qt中清除/重置模型(删除所有行)

我应该在用户提出这个请求时删除旧模型吗?或者我应该单独离开模型并删除所有行?

问候, 丹奥

回答

4

一般来说,我宁愿让模型对变化作出反应,并采取必要的行动来更新它的视图(间接地)。但是,编程模型可以是PITA,因此如果我正在审查创建新模型的代码并删除旧模型,我可能会查看手指。只有在确定用户只删除所有行时才能执行此操作。如果用户可能会逐渐删除模型中的项目,那么您可能最好是首先实施正确的删除操作...

此外,ModelTest可能会帮助您发现Qt模型的问题。

4

如果用户是真正开始了一个新的数据集,那么对我来说很有意义简单地删除旧的模式,并创建一个新的。简单,有效,它匹配用户正在做的事情。

5

我不知道哪条路是真正的“好”,但删除所有行可以是一个相当简单的功能是这样的:

void MyModel::Clear(void) 
{ 
    // remove all data from internal data structures 
    ... 

    // Call QAbstractItemModel::reset to ensure any views know that everything has changed. 
    reset(); 
} 
+3

这是不够的。 QT提供了应该使用的beginResetModel和endResetModel – IceFire 2015-11-21 17:33:23