title: QAbstractTableModel and emit dataChanged for a single row
body: <p>I derived a model from QAbstractTableModel and now I want to notify, that the data of a whole row has been changed. If for example the data of a row with index 5 is changed (4 columns), than using the following code works as expected.</p>
  
  <pre><code>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));
  </code></pre>
  
  <p>But if I try to <em>achieve the same</em> with only one emit, ALL columns of ALL rows in the view are updated.</p>
  
  <pre><code>emit dataChanged(index(5, 0), index(5, 3));
  </code></pre>
  
  <p>What I am doing wrong here?</p>
  
  <h2>Minimal example (C++11, QTCreator 4.7.1, Windows 10 (1803), 64 Bit)</h2>
  
  <p><strong>demo.h</strong></p>
  
  <pre><code>#pragma once
  #include &lt;QAbstractTableModel&gt;
  #include &lt;QTime&gt;
  #include &lt;QTimer&gt;
  
  class Demo : public QAbstractTableModel
  {
    Q_OBJECT
    QTimer * t;
  public:
    Demo()
    {
      t = new QTimer(this);
      t-&gt;setInterval(1000);
      connect(t, SIGNAL(timeout()) , this, SLOT(timerHit()));
      t-&gt;start();
    }
  
    QVariant data(const QModelIndex &amp;index, int role = Qt::DisplayRole) const override
    {
      int c = index.column();
      if (role == Qt::DisplayRole)
      {
        QString strTime = QTime::currentTime().toString();
        if (c == 0) return "A" + strTime;
        if (c == 1) return "B" + strTime;
        if (c == 2) return "C" + strTime;
        if (c == 3) return "D" + strTime;
      }
      return QVariant();
    }
  
    int rowCount(const QModelIndex &amp;) const override { return 10; }
    int columnCount(const QModelIndex &amp;) const override { return 4; }
  private slots:
    void timerHit()
    {
      //Works
      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));
  
      //emit dataChanged(index(5,0), index(5, 3)); // &lt;-- Doesn't work
    }
  };
  </code></pre>
  
  <p><strong>main.cpp</strong></p>
  
  <pre><code>#include "demo.h"
  #include &lt;QApplication&gt;
  #include &lt;QTreeView&gt;
  
  int main(int argc, char *argv[])
  {
    QApplication a(argc, argv);
    QTreeView dataView;
    Demo dataModel{};
    dataView.setModel( &amp;dataModel );
    dataView.show();
    return a.exec();
  }
  </code></pre>