小编Sou*_*rXP的帖子

QAbstractTableModel 并为单行发出 dataChanged

我从 QAbstractTableModel 派生了一个模型,现在我想通知,整行的数据已更改。例如,如果索引为 5 的行的数据发生更改(4 列),则使用以下代码可以按预期工作。

emit dataChanged(index(5,0), index(5, 0));
emit dataChanged(index(5,1), index(5, 1));
emit dataChanged(index(5,2), index(5, 2));
emit dataChanged(index(5,3), index(5, 3));
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试仅使用一次发出来实现相同的目的,则视图中所有行的所有列都会更新。

emit dataChanged(index(5, 0), index(5, 3));
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

最小示例(C++11、QTCreator 4.7.1、Windows 10 (1803)、64 位)

演示.h

#pragma once
#include <QAbstractTableModel>
#include <QTime>
#include <QTimer>

class Demo : public QAbstractTableModel
{
  Q_OBJECT
  QTimer * t;
public:
  Demo()
  {
    t = new QTimer(this);
    t->setInterval(1000);
    connect(t, SIGNAL(timeout()) , this, SLOT(timerHit()));
    t->start();
  }

  QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override …
Run Code Online (Sandbox Code Playgroud)

c++ qt row onchange qabstracttablemodel

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×1

onchange ×1

qabstracttablemodel ×1

qt ×1

row ×1