我有一个填充了QStandardItemModel的QTableView。
我经常通过网络更新模型,用户也可以直接通过QTableView更新模型。
现在,我喜欢在用户更改某些数据时调用方法,所以我这样做了:
connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(dataChanged(QStandardItem*)));现在的问题是,我的dataChanged方法也是在通过网络更新项目时调用的。
model->setData(index, new_val);是否存在仅当用户在QTableview中更改某些内容时才发出的其他信号?
发布于 2011-11-24 22:36:39
不,AFAIK没有这样的信号,但你有办法破解它。
当从QTableView编辑项目时,将发出activated信号。这个想法是捕获这个信号,并将其连接到一个插槽,该插槽将存储上次手动更改的项。
connect(view, SIGNAL(activated(QModelIndex), this, SLOT(manuallyActivated(QModelIndex)));
void manuallyActivated(QModelIndex index)
{
// This variable should be in your header file...
lastManuallyModifiedIndex = index;
}现在只需修改您的dataChanged插槽,以检查更改的项是否与上次修改的项相对应。
void dataChanged(QStandardItem* item)
{
// If it is invalid simply ignore it...
if (lastManuallyModifiedIndex.isValid() == false)
return;
// only if it is modified manually we process it
if (item->index() == lastManuallyModifiedIndex)
{
// make last modified index invalid
lastManuallyModifiedIndex = QModelIndex();
doSomething();
}
}发布于 2016-06-24 18:08:24
当更新来自您的网络时,您可以阻止表信号。
QObject::blockSignals(bool block)或者你可以接连监听点击和编辑事件。
https://stackoverflow.com/questions/8258538
复制相似问题