QAbstractTableModel:无法检查创建数据

时间:2014-04-30 08:26:14

标签: c++ qt qabstracttablemodel

我已经将QAbstractTableModel子类化了,并且我创建了一个信号,当特定列的QModelIndex数据发生变化时必须发出该信号。

void data(const QModelIndex &index, int role) const我写过这样的文字:

Variant DerivedClass::data(const QModelIndex &index, int role) const
{
  if (role == Qt::DisplayRole)
  {
    switch (index.column())
    {
      // ....
      case NAME_COLUMN_INDEX :
      {
        return updateName(index);
      } break;
    }
  }
  return QVariant();
}

这是updateName

QString DerivedClass::updateName(const QModelIndex &xIndex) const
{
  QString xName;
  if (false == xIndex.data().isNull() && true == xIndex.data().isValid())
  {
    xName = m_xDataVector.at(xIndex.row()).getName();
    if (xName != xIndex.data().toString())
    {
      emit nameChanged(m_xCellName, xName); // m_xCellName is specified otherwise
    }
  }
  return xName;
}

在这种情况下,当我创建使用此模型的窗口小部件时,我在此行中有一个内存异常:

if (false == xIndex.data().isNull() && true == xIndex.data().isValid())

如果我通过删除对这样的数据的引用来改变我的方法:

QString DerivedClass::updateName(const QModelIndex &xIndex) const
{
  QString xName;
  xName = m_xDataVector.at(xIndex.row()).getName();
  return xName;
}

我在表格中正确更新了数据,但在名称更改时不会发出信号。

如何正确检查必须更新的数据,以便在更改时通知?

编辑:

从我的callstack中我注意到崩溃是由于递归调用造成的。在DerivedClass::data()中,我致电DerivedClass::updateName(),并在此xIndex.data()。 xIndex是我的实例本身,所以我有一个无限深的递归。

我发现了问题,但我无法找到在指定行和列检索数据的方法来执行检查。

0 个答案:

没有答案