QListView样式表不使用委托

时间:2013-10-28 12:51:05

标签: c++ qt delegates qlistview

我有一个带有自定义委托的QListView

自定义委托绘制方法:

QStyleOptionViewItemV4 opt = option;

initStyleOption(&opt,index);

opt.decorationSize       = QSize(deco_size,deco_size);
opt.decorationAlignment |= Qt::AlignCenter;
opt.displayAlignment    |= Qt::AlignCenter;
opt.decorationPosition   = QStyleOptionViewItem::Top;
opt.font.setBold(true);

const QWidget *widget = opt.widget;

QStyle *style = widget ? widget->style() : QApplication::style();

style->drawControl(QStyle::CE_ItemViewItem,&opt,painter);

我的问题是,如果我为我的QListView :: item设置样式表 例如:

#lv::item:selected:active  { background: red; }

它不起作用!

如果我使用内部,没有自定义委托一切都很好。

2 我只使用自定义委托将装饰图标放在文本的顶部,是否有样式表选项强制图标显示在顶部?

1 个答案:

答案 0 :(得分:1)

我错过了QStyle :: drawControl函数“widget”的第4个参数:

style->drawControl(QStyle::CE_ItemViewItem,&opt,painter,widget);

这里,QStyledItemDelegate源代码,paint方法:

https://qt.gitorious.org/qt/webkit/source/435bbd4be73768f617e4a4083a345d1d8d62daa3:src/gui/itemviews/qstyleditemdelegate.cpp#L444