我有一个包含QTableView的QDialog以及一个显示枚举类型的QComboBox的自定义委托(delegate)。
当未选择该行时,我仍然希望QComboBox可见(我想避免使用QTableView::openPersistentEditor())。
为此,自定义委托(delegate)将paint事件转发到以下方法:
QStyleOptionViewItem &option) const
{
painter->save();
QStyleOptionComboBox comboBoxOption;
comboBoxOption.rect = option.rect;
comboBoxOption.state = option.state;
comboBoxOption.state |= QStyle::State_Enabled;
comboBoxOption.editable = false;
comboBoxOption.currentText = enumInfo.valueToKey(curValue);
// The cast is successful, and srcWidget is the QTableView
QWidget *srcWidget = qobject_cast<QWidget *>(option.styleObject);
// style->metaObject()->className() = QStyleSheetStyle
QStyle *style = srcWidget ? srcWidget->style() : QApplication::style();
// However, the QSS is ignored here (while srcWidget->styleSheet() correctly
// returns the style I've set in Qt Designer)
style->drawComplexControl(QStyle::CC_ComboBox, &comboBoxOption, painter, srcWidget);
style->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, painter, srcWidget);
painter->restore();
}
问题是我已经使用QSS设置了组合框控件的样式,但是尽管使用了QTableView的样式,drawComplexControl()似乎还是忽略了它。这是屏幕截图:
drawComplexControl()是否可以考虑样式表?
谢谢
最佳答案
我认为唯一的方法是使用QPixmap::grabWidget()来获取小部件。并在委托(delegate)中使用此图像。
似乎因为QSS limitation而无法执行
关于c++ - Qt:QSS和drawComplexControl(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21516991/