У меня есть 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 () рассмотреть таблицу стилей?
Спасибо
Я думаю, что единственный способ — это получить виджет с помощью QPixmap :: grabWidget (). И использовать это изображение в делегате.
Кажется, что это невозможно сделать из-за Ограничение QSS
Я считаю, что вам нужно использовать грязные хаки с приведением стиля () к закрытому QStyleSheetStyle