У меня есть QDialog, содержащий QTableView, а также пользовательский делегат, показывающий QComboBox для типов перечисления. Когда строка не выбрана, я все равно хочу, чтобы QComboBox был виден (я хотел бы избежать использования QTableView::openPersistentEditor()). Для этого пользовательский делегат перенаправляет событие рисования следующему методу:
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, но drawComplexControl(), похоже, игнорирует это, несмотря на использование стиля QTableView. Вот скриншот:
Может ли drawComplexControl() учитывать таблицу стилей?
Спасибо
drawComplexControl()
работает, как и ожидалось, только если мы вызываем его из подклассаQStyleSheetStyle
(приведение не требуется) И мы передаем экземпляр виджета с примененным стилем (в моем вопросеsrcWidget
указывает наQTableView
, который неправильно. Вместо этого мне нужен экземплярQComboBox
) - person XDnl   schedule 04.02.2014