data():: QModelIndex崩溃

时间:2015-12-05 12:22:41

标签: qt

为什么在拨打idx.data()时,以下代码会崩溃?

QVariant ApplicantTableModel::data(const QModelIndex &idx, int role) const
{
    if (!idx.isValid()) return QVariant();
    if (idx.column() == 10 && role == Qt::DisplayRole)
        if(idx.data() == "0")
            return "-";
        else return "+";
    else return QSqlTableModel::data(idx,role);
}

1 个答案:

答案 0 :(得分:0)

如果idx是同一ApplicantTableModel实例的索引(它应该是,否则用法不正确)idx.data()将调用idx.model() - > data(),即我们正在查看=>的ApplicantTableModel :: data()函数非常相同无限递归,导致堆栈溢出/崩溃。

从您的代码我猜测您想要的是什么

QVariant ApplicantTableModel::data(const QModelIndex &idx, int role) const
{
    if (!idx.isValid())
         return QVariant();
    if (idx.column() == 10 && role == Qt::DisplayRole) {
         if(QSqlTableModel::data(idx,role).toString() == “0")
             return "-";
         else
             return "+";
   }
   return QSqlTableModel::data(idx, role);
}

即。 call从基类实现中获取数据的值,并在这种特殊情况下更改它。