C++ QStandardItemModel-如何按用户移动的行而不是单元格更改忽略数据更改事件

C++ QStandardItemModel-如何按用户移动的行而不是单元格更改忽略数据更改事件,c++,qt,C++,Qt,我正在使用带有表视图的QStandardItemModel “我的表格”允许移动行并允许用户编辑单元格 我想从用户编辑中捕获单元格更改 问题是,如果用户拖动一行和/或编辑单元格,将触发相同的信号。如何获取单元格更改并忽略行更改?解决方案是将QStandariemModel子类化。不要浪费时间尝试从GUI中按所选、单击和按下的项目进行跟踪。一旦您创建了子类,您现在就可以控制模型(即您的数据)的工作方式,我们可以做任何事情 特别是,看看::itemData、::dropMimeData和::setD

我正在使用带有表视图的QStandardItemModel

“我的表格”允许移动行并允许用户编辑单元格

我想从用户编辑中捕获单元格更改


问题是,如果用户拖动一行和/或编辑单元格,将触发相同的信号。如何获取单元格更改并忽略行更改?

解决方案是将QStandariemModel子类化。不要浪费时间尝试从GUI中按所选、单击和按下的项目进行跟踪。一旦您创建了子类,您现在就可以控制模型(即您的数据)的工作方式,我们可以做任何事情

特别是,看看::itemData、::dropMimeData和::setData函数。在这些项目之间,您知道哪些是来自内部dnd的,哪些不是。您可以存储到var,通过Qt的sig/slot机制发送到GUI,或者您的类需要的任何东西

另一个有用的工具是钩住deleget closeEditor函数:

#include <QAbstractItemDelegate>
QAbstractItemDelegate * d = tv->itemDelegate();
 connect(d, &QAbstractItemDelegate::closeEditor, this, &MainWindow::endEditHint);
#包括
qabstractemdelegate*d=tv->itemdegate();
连接(d,&QAbstractItemDelegate::closeEditor,this,&MainWindow::endEditHint);
希望这能帮助任何可能出现这种情况的人