gpt4 book ai didi

c++ - `emit dataChanged( ... );` 不触发 View 显示更新的可能原因是什么?

转载 作者:行者123 更新时间:2023-11-30 02:07:22 24 4
gpt4 key购买 nike

我正在将我的第三个“朴素”模型实现为 QAbstractItemModel 继承类。

到目前为止它运行良好。但是,我一直在我的 View 中使用只读的“静态”模型,并且只根据用户的操作更改了某些 View 的模型。所以我使用 my_view->setModel( a_model ); 来更新 View 。

现在我需要有一个 View 来保持一个独特的模型,但有时需要更新该模型,使用我在需要时在代码中调用的特殊函数“update()”函数。

在 update() 函数的末尾,我只是用相应的数据调用 emit dataChanged( ... );

它似乎没有更新这个模型所连接的 View 。进行 View 更新的唯一方法似乎是执行类似 my_view->setModel( nullptr ); 然后 my_view->setModel( a_model ); 的操作。

emit dataChanged( ... ); 不触发 View 显示更新的可能原因是什么?

我一直在调试我的模型实现函数,并且调用了 index() 函数而不是 data()。我有点担心,在更改模型(不是通过 View 更改而是以编程方式更改)的情况下,我可能对模型/ View 系统不了解。

这是一个开源项目,所以你可以在那里检查完整的模型代码(我认为它有点 hacky,不用于建模/查看 Qt 系统):http://code.google.com/p/art-of-sequence/source/browse/tools/aosdesigner/view/model/LayerObjectsModel.cpp?spec=svn4fe209aa3e82f2c7cd42192581a890e28bada9b0&r=4fe209aa3e82f2c7cd42192581a890e28bada9b0管理 View 的小部件代码可在此处获得:http://code.google.com/p/art-of-sequence/source/browse/tools/aosdesigner/view/LayersView.cpp?spec=svn4fe209aa3e82f2c7cd42192581a890e28bada9b0&r=4fe209aa3e82f2c7cd42192581a890e28bada9b0

最佳答案

我检查了一下 Qt 文档。 dataChanged() 应该在模型的现有数据更改时发出。

如果要向模型中添加行,请检查 beginInsertRowsendInsertRows

来自 insertRows Qt 文档:

If you implement your own model, you can reimplement this function if you want to support insertions. Alternatively, you can provide your own API for altering the data. In either case, you will need to call beginInsertRows() and endInsertRows() to notify other components that the model has changed.

如果您要从模型中删除相应的行,请检查 beginRemoveRowsendRemoveRows

另请查看 beginResetData

When a model radically changes its data it can sometimes be easier to just call this function rather than emit dataChanged() to inform other components when the underlying data source, or its structure, has changed.

关于c++ - `emit dataChanged( ... );` 不触发 View 显示更新的可能原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7958582/

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