SIGNAL(itemChanged(QStandardItem*))没有分分辨
时间: 2024-03-15 11:44:20 浏览: 27
是的,您说得对。QStandardItemModel 的 dataChanged() 信号无法区分是从窗口输入修改的还是从代码修改的。因此,如果需要在这个信号的槽函数中区分二者,需要自行记录当前的修改状态。
可以定义一个 bool 类型的变量,用于标记当前是否正在从代码修改数据。在代码修改数据时将该变量设置为 true,在 dataChanged() 信号的槽函数中判断该变量的值,即可确定当前的修改状态。
以下是一个示例:
```cpp
// 定义一个 bool 类型的变量,用于标记是否正在从代码修改数据
bool isFromCode = false;
// 监听 QStandardItemModel 的 dataChanged() 信号
connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
this, SLOT(onDataChanged(QModelIndex,QModelIndex,QVector<int>)));
// 处理 dataChanged() 信号的槽函数
void MainWindow::onDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
{
if (isFromCode) {
// 当前正在从代码修改数据
// do something...
} else {
// 当前正在从窗口输入修改数据
// do something...
}
}
// 从代码修改数据时,设置 isFromCode 为 true
void MainWindow::onBtnClicked()
{
isFromCode = true;
model->setData(model->index(0, 0), "data from code");
isFromCode = false;
}
```
这样,当从窗口输入修改数据时,isFromCode 为 false,当从代码修改数据时,isFromCode 为 true。在 dataChanged() 信号的槽函数中,可以根据 isFromCode 的值来判断当前的修改状态。