問題:
QTreeView
オブジェクトと、QStandardItemModel
ウィジェットを表示するためのモデルがあります。- 一部のアイテムについて
setData
は、パラメーターを使用してそれらを分割するメソッドを使用してデータを設定しました。 - そのため、アイコンといくつかのテキストデータを含むアイテムに対して異なる背景のピックスマップを描画する必要があります。
QStandardItem
- そして、すべてのアイテムオブジェクトを再描画したくありません。つまり、アイコンとテキストです。背景を変更するだけです。
最初に、私はそれを考えていました:
Qt Designer
2つの異なる背景画像を持つオブジェクトにCSSスタイルシートを設定できましたが、メソッドQStandardItem
がありませんsetProperty
...
例:
QTreeView#treeView::item[ROLE="AAA"],
QTreeView#treeView::branch[ROLE="AAA"]
{
height: 25px;
border: none;
color: #564f5b;
background-image: url(:/backgrounds/images/row1.png);
background-position: top left;
}
QTreeView#treeView::item[ROLE="BBB"],
QTreeView#treeView::branch[ROLE="BBB"]
{
height: 25px;
border: none;
color: #564f5b;
background-image: url(:/backgrounds/images/row2.png);
background-position: top left;
}
QStyledItemDelegate
次に、クラスから継承された独自のデリゲートを作成し、メソッドpaint
を再実装しましたが、コードが上書きされるため、バックグラウンドを変更することはできません...QStyledItemDelegate::paint( painter, opt, index );
drawPixmap
例:
QStyleOptionViewItemV4 opt = option; // Для обхода QTBUG-4310
opt.state &= ~QStyle::State_HasFocus; // Чтобы не рисовался прямоугольник фокуса
QStyledItemDelegate::paint( painter, opt, index );
// HERE I WANT TO CHANGE BACKGROUND (DEFAULT IS ALREADY SET IN DESIGNER WITH ABOVE CODE)
if( index.data( SORT_ROLE ).toBool() )
{
const QPixmap pixmap( ":/backgrounds/images/backgrounds/contractor_row__high_priority.png" );
painter->drawPixmap( option.rect, pixmap, pixmap.rect() );
QStyledItemDelegate::paint( painter, opt, index );
}
だから私は立ち往生しています...