QTreeView
行の内容に応じて、行の異なる背景色が必要です。これを実現するために、次のようにclass MyTreeView
fromを派生QTreeView
させ、ペイント メソッドを実装しました。
void MyTreeView::drawRow (QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
QStyleOptionViewItem newOption(option);
if (someCondition)
{
newOption.palette.setColor( QPalette::Base, QColor(255, 0, 0) );
newOption.palette.setColor( QPalette::AlternateBase, QColor(200, 0, 0) );
}
else
{
newOption.palette.setColor( QPalette::Base, QColor(0, 0, 255) );
newOption.palette.setColor( QPalette::AlternateBase, QColor(0, 0, 200) );
}
QTreeView::drawRow(painter, newOption, index);
}
最初にsetAlternatingRowColors(true);
、QTreeView を設定しました。
私の問題: QPalette::Baseの色を設定しても効果がありません。2 行おきに白のままです。
ただし、QPalette::AlternateBase の設定は期待どおりに機能します。私は試してみましたが、何の効果もsetAutoFillBackground(true)
ありsetAutoFillBackground(false)
ませんでした。
この問題を解決するヒントはありますか? ありがとうございました。
注意:適応して色を設定しても、望ましい結果は得MyModel::data(const QModelIndex&, int role)
られQt::BackgroundRole
ません。この場合、背景色は行の一部にのみ使用されます。しかし、ツリー ナビゲーションの左側を含め、行全体に色を付けたいと思います。
Qt バージョン: 4.7.3
更新:
理由は不明QPalette::Base
ですが、不透明なようです。setBrush はそれを変更しません。次の回避策を見つけました。
if (someCondition)
{
painter->fillRect(option.rect, Qt::red);
newOption.palette.setBrush( QPalette::AlternateBase, Qt::green);
}
else
{
painter->fillRect(option.rect, Qt::orange);
newOption.palette.setBrush( QPalette::AlternateBase, Qt:blue);
}