C++ 什么是';右下角';在Qt中使用带有QTreeView的dataChanged()时是什么意思?

C++ 什么是';右下角';在Qt中使用带有QTreeView的dataChanged()时是什么意思?,c++,qt,C++,Qt,当使用dataChanged(const QModelIndex&topLeft,const QModelIndex&bottomRight)信号时,理解上左和下右QModelIndex是很简单的,但是当使用QTableView时,我会混淆bottomRight bottomRight到底是什么意思 我是否可以通过发出一次emit datachanged()信号来更新整个树视图?该datachanged()信号对于表视图和树视图具有相同的含义。但是,如果树视图中更改的项具有不同的父项,则行为未定

当使用
dataChanged(const QModelIndex&topLeft,const QModelIndex&bottomRight)
信号时,理解上左和下右QModelIndex是很简单的,但是当使用
QTableView
时,我会混淆
bottomRight

bottomRight
到底是什么意思

我是否可以通过发出一次
emit datachanged()
信号来更新整个树视图?

datachanged()
信号对于表视图和树视图具有相同的含义。但是,如果树视图中更改的项具有不同的父项,则行为未定义

请回答关于更新整个树视图的问题,答案是否,您不能通过发出此信号来更新它。更新模型后发出的
dataChanged()
信号

来自模型的
dataChanged()
信号更新视图。代码
emit
dataChanged(QModelIndex(),QModelIndex())
将更新整个树视图。树视图的
update()
调用不起作用

代码:


我感到困惑的是,如果我使用
QModelIndex
迭代器将
dataChanged()
topfleft
参数设置为根项目行0和列0,将
bottomRight
设置为树模型的最后一项,当然,使用
QModelIndex
迭代器,整个树视图会被更新吗,会发生什么,为什么会发生?@user1636288,对不起,我应该说“…模型更新后发出的信号”-模型,而不是视图。我现在已经把课文修好了。正如Qt文档所说,如果您的第一项和最后一项是不同的父项,那么行为是未定义的。感谢您的回答。我认为
dataChanged()
信号用于通知视图更新自身,而不调用整个窗口的
update()
函数,并且
dataChanged()
信号自动连接到视图
setModel()中视图的
dataChanged()
插槽
功能。只要现有项目中的数据发生变化,就会发出此信号。如果项目属于同一父项,则受影响的项目是位于左上角和右下角(含左下角)之间的项目。如果项没有相同的父项,则行为未定义//更新整个树视图。emit dataChanged(QModelIndex(),QModelIndex());通常避免只使用代码的答案。考虑添加<代码>描述< /代码>。感谢来自模型的
dataChanged()
信号更新视图。代码
emit dataChanged(QModelIndex(),QModelIndex())
更新整个树视图。树视图的update()调用无效。谢谢。我已将你的描述纳入你的回答中。根据需要随时修改。顺便说一句,欢迎来到SO请注意,如果您在源模型之上使用代理模型,则从源模型发出带有默认构造索引的dataChanged不会导致视图更新(如果其中任何一个索引无效,代理模型将不会转发dataChanged信号),谢谢,@CsabaTorda。很高兴知道。我在我的模型上使用代理/过滤视图,并且存在此问题。那么,如果使用代理模型,更新整个视图的最佳方法是什么?
// update the whole tree views.
emit dataChanged(QModelIndex(), QModelIndex());