首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTableView、QStandardItemModel和信号

QTableView、QStandardItemModel和信号
EN

Stack Overflow用户
提问于 2011-11-24 22:22:25
回答 2查看 5.8K关注 0票数 4

我有一个填充了QStandardItemModelQTableView

我经常通过网络更新模型,用户也可以直接通过QTableView更新模型。

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

代码语言:javascript
复制
connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(dataChanged(QStandardItem*)));

现在的问题是,我的dataChanged方法也是在通过网络更新项目时调用的。

代码语言:javascript
复制
model->setData(index, new_val);

是否存在仅当用户在QTableview中更改某些内容时才发出的其他信号?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-24 22:36:39

不,AFAIK没有这样的信号,但你有办法破解它。

当从QTableView编辑项目时,将发出activated信号。这个想法是捕获这个信号,并将其连接到一个插槽,该插槽将存储上次手动更改的项。

代码语言:javascript
复制
connect(view, SIGNAL(activated(QModelIndex), this, SLOT(manuallyActivated(QModelIndex)));

void manuallyActivated(QModelIndex index)
{
   // This variable should be in your header file...
   lastManuallyModifiedIndex = index;
}

现在只需修改您的dataChanged插槽,以检查更改的项是否与上次修改的项相对应。

代码语言:javascript
复制
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();
    }   
}
票数 3
EN

Stack Overflow用户

发布于 2016-06-24 18:08:24

当更新来自您的网络时,您可以阻止表信号。

代码语言:javascript
复制
QObject::blockSignals(bool block)

或者你可以接连监听点击和编辑事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8258538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档