1
這裏的主要問題是:我使用QTreeWidget
類作爲主樹,它必須告訴我這個樹狀結構:如何以不同風格繪製QTreeWidgetItem?
[Today]
[Row1]
[Row2]
[SubRow21]
[SubRow22]
[Row3]
[Yesterday]
[Row4]
[SubRow41]
[etc]
有了Qt Designer
我已經將這個樣式表代碼:
QTreeWidget#treeWidget::item
{
height: 24px;
border: none;
background-position: bottom left;
background-image: url(:/backgrounds/images/backgrounds/row_back.png);
}
QTreeWidget#treeWidget::item:selected
{
color: #000000;
background-position: bottom left;
background-image: url(:/spreadsheet/images/spreadsheet/row_back_selected.png);
}
而且所有項目與* row_back.png *背景圖片,但我需要繪製另一背景圖像[戶拉y] and [昨天]行!出於這些目的,我不得不繼承QStyledItemDelegate
類,但不知道方法,重置風格的新背景圖片:
void MyColumnDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
QStyleOptionViewItemV4 op = option;
if(isPeriod(index))
{
// here I heed to change background image!!!
//QStyle* style = op.widget ? op.widget->style() : QApplication::style();
//style->drawControl(QStyle::CE_ItemViewItem, &op, painter, op.widget);
//QRect backgroundRect(option.rect.x() + 5, option.rect.y() + 5, 18, 18);
//style->drawItemPixmap(painter, backgroundRect, Qt::AlignCenter, QPixmap(SOME_PIC));
//QStyledItemDelegate::paint(painter, op, index);
return;
}
op.text = "";
QStyle* style = op.widget ? op.widget->style() : QApplication::style();
style->drawControl(QStyle::CE_ItemViewItem, &op, painter, op.widget);
QModelIndex dataIndex = index.model()->index(index.row(), ePosChain, index.parent());
LetterInfo data = index.model()->data(dataIndex, PackageDataRole).value<LetterInfo>();
switch(data.document_.state_)
{
case(eStateSignedByOwner):
painter->drawPixmap(getPos(op, index, QPixmap(IMAGE2)), QPixmap(IMAGE2));
break;
case(eStateSignedByHost):
painter->drawPixmap(getPos(op, index, QPixmap(IMAGE1)), QPixmap(IMAGE1));
break;
}
painter->drawText(getTextPos(op, index), data.text);
}
任何幫助嗎?
謝謝!