1

私は過去に 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 を呼び出してみましたが、役に立ちませんでした。(もちろん、この行の各インデックスに対してこれを行いますが、最初はうまくいかないので、そこでやめました。)

これに関するアイデアはありますか?Web をよく検索しましたが、行全体に色を付ける方法が見つからないようです。

4

1 に答える 1

1

私はそのようなことをします(まったくテストではないので、適応が必要になる場合があります):

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」が有効かどうかを確認しても害はありません...

于 2014-10-24T07:16:19.353 に答える