2011-11-18 120 views
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); 
} 

任何幫助嗎?

謝謝!

回答

1

解決與此代碼:

if(isPeriod(index)) 
    { 
      QPixmap pixmap(PERIOD_ROW_BACKGROUND); 
      painter->drawPixmap(op.rect, pixmap, pixmap.rect()); 

      return; 
    }