QIdentityProxyModel
を使用してください(ただし、4.8から - QAbstractProxyModel
というアイデアは同じですが、前者は必要なメソッドのみを再実装することで時間を節約する便利なクラスです)。このアプローチは、要素ごとに要求が要求された瞬間にデータが設定されて返されるため、ループを使用しないようにします。つまり、すべてのデータを繰り返し処理し、必要な値を設定するのではなく、ビューのデータを提供するクラスのメソッドを変更します(宣言的なアプローチのほうが多い)、ビューはデータを取得しますそれ自体で必要なとき。 QIdentityProxyModelクラスは、そのソースモデルが変更されていないプロキシ
http://doc.qt.io/qt-5/qidentityproxymodel.html
:ドキュメントを引用する
。ソートやフィルタリングは行われないため、このクラスはソースモデルのdata()を変換するモデルをプロキシするのに最適です。 たとえば、使用するフォント、背景色、ツールチップなどを定義するプロキシモデルを作成することができます。これにより、モデルの構造を作成する同じクラスですべてのデータ処理を実装する必要がなくなります。再使用可能なコンポーネントを作成するためにも使用できます。私たちのケースでは
は、可能な実装は、次のとおりです。あなたが見ることができるように、モデル自体を通じてQt::TextAlignmentRole
に一致しないデータの一部を通過して、目的の値を返します
class StylingProxyModel : public QIdentityProxyModel
{
QVariant data(const QModelIndex &index, int role) const
{
if (role != Qt::TextAlignmentRole)
return QIdentityProxyModel::data(index, role);
return Qt::AlignCenter;
}
};
さもないと。
QSqlRelationalTableModel
をこのカスタムアイデンティティモデルのソースとして設定し、プロキシモデルをビューのソースに設定します。
「重い砲兵」オプションはQStyledItemDelegate
のサブクラスになりますが、テキストの配置を設定するよりも深遠な方法でビュー/デリゲートの外観を変更するタスクに適しています。
さらに読むためにSet color to a QTableView rowを参照してください。
あなたは 'QIdentityProxyModel'ソリューションをテストしましたか?私は自分自身をテストする時間がありませんし、それが意図したとおりに動作するかどうかを知りたいと思っています。 – iksemyonov
ソリューションが機能するかどうかチェックしましたか? – iksemyonov