【问题标题】:Clearing/resetting a model in qt (removing all rows)在 qt 中清除/重置模型(删除所有行)
【发布时间】:2009-09-27 00:46:51
【问题描述】:

我对重置或清除与QAbstractItemModel 关联的数据的正确方法是什么感到困惑?

我正在编写一个应用程序,用户可以在其中使用一组新数据(空或小)“重新开始”。

当用户提出此请求时,我是否应该删除旧模型?还是我应该不理会模型,只删除所有行?

问候, 丹奥

【问题讨论】:

    标签: c++ design-patterns qt model-view-controller


    【解决方案1】:

    一般来说,我希望模型对更改做出反应并采取必要的行动来更新它的视图(当然是间接的)。但是,编程模型可以是(=是)PITA,所以如果我正在审查创建新模型并删除旧模型的代码,我可能会仔细研究。仅当您确定用户只会删除所有行时才执行此操作。如果用户可能会逐步从模型中删除项目,那么您最好首先正确实施删除...

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

    【讨论】:

      【解决方案2】:

      如果用户真正开始使用一组新数据,那么对我来说,简单地删除旧模型并创建一个新模型是有意义的。简单、有效,并且与用户正在做的事情相匹配。

      【讨论】:

        【解决方案3】:

        我不知道哪种方式真正“更好”,但删除所有行可能是一个相当简单的功能,例如:

        void MyModel::Clear(void)
        {
            // remove all data from internal data structures
            ...
        
            // Call QAbstractItemModel::reset to ensure any views know that everything has changed.
            reset();
        }
        

        【讨论】:

        • 这还不够。 QT 提供 beginResetModel 和 endResetModel 应该使用
        猜你喜欢
        • 1970-01-01
        • 2016-05-04
        • 2017-03-14
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        相关资源
        最近更新 更多