Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “发出数据更改(…);”的可能原因是什么不触发视图';显示更新?_C++_Qt - Fatal编程技术网

C++ “发出数据更改(…);”的可能原因是什么不触发视图';显示更新?

C++ “发出数据更改(…);”的可能原因是什么不触发视图';显示更新?,c++,qt,C++,Qt,我正在将我的第三个“naive”模型实现为QabstracteModel继承类 到目前为止,它运作良好。 但是,我一直在视图中使用只读的“静态”模型,并且仅根据用户的操作更改了某些视图的模型。所以我使用了my_view->setModel(a_模型)以更新视图 现在我需要一个视图来保持一个唯一的模型,但该模型有时需要更新,使用一个特殊的函数“update()”函数,我在需要时在代码中调用该函数 在update()函数的末尾,我只调用emit dataChanged(…)和相应的数据 它似乎不会更

我正在将我的第三个“naive”模型实现为QabstracteModel继承类

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

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

在update()函数的末尾,我只调用
emit dataChanged(…)和相应的数据

它似乎不会更新此模型所连接的视图。进行视图更新的唯一方法似乎是执行类似于
my_view->setModel(nullptr)的操作然后
我的视图->设置模型(a模型)再次

发出数据更改(…)的可能原因是什么不触发视图的显示更新?

我一直在调试我的模型实现函数和index()函数,但没有调用data()。我有点担心,在更改模型(不是通过视图更改,而是通过编程更改)的情况下,可能我不了解模型/视图系统的某些内容

这是一个开源项目,所以你可以在那里查看完整的模型代码(我认为它有点粗糙,不习惯于对Qt的系统进行建模/查看):
管理视图的小部件的代码在那里可用:

我查看了一些Qt文档<当模型的现有数据更改时,应发出code>dataChanged()

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

从insertRows Qt文档中:

如果您实现自己的模型,您可以在以下情况下重新实现此功能: 您希望支持插入。或者,您可以提供 拥有用于更改数据的API。无论哪种情况,您都需要打电话 beginInsertRows()和endInsertRows()通知其他组件 模式已经改变

如果要从模型中删除行,请相应地检查和

也看看

当模型彻底更改其数据时,有时更容易 只需调用此函数,而不是发出dataChanged()来通知其他 当基础数据源或其结构 变了


我查阅了一些Qt文档<当模型的现有数据更改时,应发出code>dataChanged()

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

从insertRows Qt文档中:

如果您实现自己的模型,您可以在以下情况下重新实现此功能: 您希望支持插入。或者,您可以提供 拥有用于更改数据的API。无论哪种情况,您都需要打电话 beginInsertRows()和endInsertRows()通知其他组件 模式已经改变

如果要从模型中删除行,请相应地检查和

也看看

当模型彻底更改其数据时,有时更容易 只需调用此函数,而不是发出dataChanged()来通知其他 当基础数据源或其结构 变了


您是否尝试过显式地在模型的信号和视图的插槽之间创建连接?没有,但我认为这是由setModel()自动完成的调用,但现在我不太确定…@weblectic没有相关说明:您是否尝试在模型的信号和视图的插槽之间显式创建连接?没有,但我认为这是由setModel()调用自动完成的,但现在我不太确定…@weblectic没有相关说明:谢谢,使用begin/endResetData确实有效。我不知道更改行确实需要不同的消息,使用begin/endResetData确实有效。我不知道更改行确实需要不同的消息