【问题标题】:data()::QModelIndex crashdata()::QModelIndex 崩溃
【发布时间】:2015-12-05 12:22:40
【问题描述】:

为什么我调用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);
}

【问题讨论】:

  • 它崩溃是因为我调用了 idx.data(),但我不明白为什么?

标签: qt


【解决方案1】:

如果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);
}

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

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2010-11-16
    • 2022-01-02
    • 2018-06-22
    相关资源
    最近更新 更多