gpt4 book ai didi

QTableView、QStandardItemModel 和信号

转载 作者:行者123 更新时间:2023-12-03 15:54:59 27 4
gpt4 key购买 nike

我有一个 QTableView ,填充了 QStandardItemModel .
我经常通过网络更新模型,模型也由用户直接通过 QTableView 更新。 .

现在我喜欢在用户更改一些数据时调用一个方法,所以我做了:

connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(dataChanged(QStandardItem*)));

现在的问题是,我的 dataChanged方法被调用,也在项目通过网络更新时被调用。
model->setData(index, new_val);

是否有另一个信号仅在用户正在更改 QTableview 中的某些内容时才发出? ???

最佳答案

不,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 slot 检查更改的项目是否与上次修改的项目相对应。
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();
}
}

关于QTableView、QStandardItemModel 和信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8258538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com