拥有QSqlTableModel,根据QModelIndex的值为整行着色



我过去扩展过QSqlTableModel,但现在我被卡住了(毕竟还是个初学者):

QVariant MyChild::data(const QModelIndex &index, int role) const
{
    // Check if (soft)deleted / cancelled
    if(index.column() == 3)
    {
       if(QSqlTableModel::data(index, Qt::DisplayRole).toString() == "1")
       {
           if(role == Qt::DisplayRole)
           {
               return "Deleted";
           }
           if(role == Qt::BackgroundColorRole)
           {
               return QVariant(QColor(Qt::yellow));
           }
          // QSqlTableModel::setData(index, QVariant(QColor(Qt::red)), Qt::BackgroundColorRole);
      //     setData(index, QColor(Qt::red), Qt::BackgroundColorRole);
       }
    }
   return QSqlTableModel::data(index, role);
}

现在,这对它的作用非常好。它将表格中的字段涂成黄色,但我希望整行都涂上颜色。所以你可以一眼就看到,这个记录已经被(软)删除了。

正如您所看到的,我已经尝试过调用setData,但没有成功。(当然,我会对这一行中的每个索引都这样做,但由于一开始不起作用,我就到此为止了。)

对此有什么想法吗?我在网上搜索了很多,但似乎找不到给整排涂颜色的方法。

我会做这样的事情(它根本不是测试集,所以可能需要调整):

QVariant MyChild::data(const QModelIndex &index, int role)
{
    // Check if (soft)deleted / cancelled
    if(role == Qt::DisplayRole && index.column() == 3 && QSqlTableModel::data(index, Qt::DisplayRole).toString() == "1")
    {
        return "Deleted";
    }
    else if(role == Qt::BackgroundColorRole)
    {
        QModelIndex tmpIdx = QSqlTableModel::index(index.row(), 3, index.parent());
        if(QSqlTableModel::data(tmpIdx, Qt::DisplayRole).toString() == "1")
        {
            return QVariant(QColor(Qt::yellow));
        }
    }
    return data(index, role);
}

因此,如果指定的列表示该行已删除,请检查每个模型索引。检查"tmpIdx"是否有效也没有害处。。。

相关内容

  • 没有找到相关文章

最新更新