我的代表没有显示复选框

时间:2012-03-17 14:05:41

标签: c++ qt

伙计我已经基于QStyledItemDelegate实现了我的委托类,我遇到的问题是它没有显示listView中显示的文本旁边的复选框。

在我使用我的委托之前,我在listView中显示了这些复选框,所以我知道这个委托类中存在的问题。
有什么想法吗?

编辑

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);
}

1 个答案:

答案 0 :(得分:1)

Qt::CheckState QStyleOptionViewItemV4::checkState

如果此视图项是可检查的,即ViewItemFeature::HasCheckIndicator为真,则checkState如果选中该项,则为真;否则,这是假的。

我在方法中发现了这个相当模糊的参考,有一个检查指标。它说如果你想让项目“可检查”,那么设置这个style option。所以尝试类似的事情:

style_option.ViewItemFeatures = QStyleOptionViewItemV2::HasCheckIndicator;