Qt data()::QModelIndex崩溃

Qt data()::QModelIndex崩溃,qt,Qt,为什么调用idx.data()时以下代码会崩溃 如果idx是同一AppliantTableModel实例的索引(应该是,否则用法不正确),idx.data()将调用idx.model()->data(),即我们正在查看的同一AppliantTableModel::data()函数=>无限递归,这将导致堆栈溢出/崩溃 从你的代码我猜你想要的可能是 QVariant ApplicantTableModel::data(const QModelIndex &idx, int role) con

为什么调用
idx.data()
时以下代码会崩溃


如果
idx
是同一AppliantTableModel实例的索引(应该是,否则用法不正确),idx.data()将调用idx.model()->data(),即我们正在查看的同一AppliantTableModel::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);
}

例如,调用从基类实现中获取数据的值,并在这种特殊情况下对其进行更改。

它会崩溃,因为我调用了idx.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);
}