2012-03-17 102 views
0

夥計們我根據QStyledItemDelegate實現了我的委託類,我遇到的問題是它不顯示listView中顯示的文本旁邊的複選框。我的代表不顯示覆選框

在我使用我的委託之前,我在listView中顯示了這些複選框,所以我知道這個問題存在於這個委託類中。
有什麼想法?

EDIT

void Display_Delegate::paint(QPainter* painter, 
           const QStyleOptionViewItem& option, 
           const QModelIndex &index) const 
{ 
    QString model_data = index.data().toString(); 
    QFontMetrics metrics = view_->fontMetrics(); 
    int view_width = view_->width(); 
    auto modified_str = adjust_text(metrics,model_data,view_width);//this just makes the string to fit into view, don't bother about it. 
    QStyleOptionViewItemV4 style_option = option; 
    initStyleOption(&style_option,index); 
    QPalette::ColorGroup color_group = style_option.state & QStyle::State_Selected ? QPalette::Active : QPalette::Inactive; 
    if (style_option.state & QStyle::State_Selected) 
    { 
     // painter->setPen(style_option.palette.color(color_group, QPalette::Highlight)); 
     painter->setBackgroundMode(Qt::OpaqueMode); 

     QColor color(148,231,245,100); 
     painter->setBackground(QBrush(color)); 
    } 
    else 
    { 
     painter->setPen(style_option.palette.color(color_group, QPalette::Text)); 
    } 

    painter->drawText(option.rect,modified_str); 
} 
+3

我正在考慮一個高大的香蕉代基裏。你自己呢?哦,也許是一個有編程問題的人發佈代碼的夢想世界。 – 2012-03-17 14:08:18

+0

@KerrekSB好的,我會在我的委託中發佈paint fnc的代碼,沒問題。你可能會認爲模型和代理模型是正確實現的(它們是,它們和dflt委託一起工作) – smallB 2012-03-17 14:27:48

+0

@KerrekSB有趣的是人們如何快速給予+1,即使這個+1是在我實際編輯我的OP之後給出的,你覺得呢? – smallB 2012-03-17 14:55:52

回答

1
Qt::CheckState QStyleOptionViewItemV4::checkState 

If this view item is checkable, i.e., ViewItemFeature::HasCheckIndicator is true, checkState 
is true if the item is checked; otherwise, it is false. 

我的方法中發現了這個相當晦澀參考具有檢查指示器。它說,如果你想讓這個項目「可檢查」,那麼設置這個style option。所以嘗試像這樣:

style_option.ViewItemFeatures = QStyleOptionViewItemV2::HasCheckIndicator;