QListView 样式表不适用于委托
Posted
技术标签:
【中文标题】QListView 样式表不适用于委托【英文标题】:QListView stylesheet not working with delegate 【发布时间】:2013-10-28 12:51:04 【问题描述】:我有一个带有自定义委托的 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】:我错过了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
【讨论】:
以上是关于QListView 样式表不适用于委托的主要内容,如果未能解决你的问题,请参考以下文章
样式表元素适用于 Windows,但不适用于 raspberry-pi