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;
}

У меня правильно обновлены данные в моей таблице, но при смене имени сигнал не подается.

Как я могу правильно проверить данные, которые я должен обновить, чтобы уведомить их об изменении?

РЕДАКТИРОВАТЬ:

Из моего стека вызовов я заметил, что сбой происходит из-за рекурсивных вызовов. в DerivedClass::data() Я звоню DerivedClass::updateName()и в этом xIndex.data(), xIndex — это мой экземпляр, так что у меня есть рекурсия с бесконечной глубиной.

Я обнаружил проблему, но не могу найти способ извлечь данные в указанной строке и столбце, чтобы выполнить свою проверку.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]