У меня есть небольшое дополнение.
Если кто-то компилирует код skyhisi, то комбинированный список в Mac OS X
не выглядит как выпадающий список с нативными флажками. Вы можете видеть это
на скриншоте.
![enter image description here](https://i.stack.imgur.com/OEnd7.png)
Протестировано с qt-4.8.5 и 5.1.1.
Кажется, что Qt рисует эти элементы управления самостоятельно. Наша команда имеет
нашел следующий обход по чистой случайности. Вы можете создать подкласс QStyledItemDelegate
и переопределить paint()
следующим образом:
void SubclassOfQStyledItemDelegate::paint(QPainter * painter_, const QStyleOptionViewItem & option_, const QModelIndex & index_) const
{
QStyleOptionViewItem & refToNonConstOption = const_cast<QStyleOptionViewItem &>(option_);
refToNonConstOption.showDecorationSelected = false;
//refToNonConstOption.state &= ~QStyle::State_HasFocus & ~QStyle::State_MouseOver;
QStyledItemDelegate::paint(painter_, refToNonConstOption, index_);
}
Затем вы можете установить этого делегата в поле со списком, добавив следующие строки в код skyhisi:
SubclassOfQStyledItemDelegate *delegate = new SubclassOfQStyledItemDelegate(this);
combo->setItemDelegate(delegate);
ComboBox, установленный с этим делегатом, выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/LPn39.png)
В Windows может возникнуть другая проблема: текст флажков имеет прикрепленный фон или пунктирную рамку вокруг элемента:
![enter image description here](https://i.stack.imgur.com/5jqCX.png)
Чтобы изменить этот внешний вид, можно добавить следующую строку к переопределенной краске просто
перед строкой QStyledItemDelegate :: paint (painter_, refToNonConstOption, index_)
(в примере кода эта строка была прокомментирована):
refToNonConstOption.state &= ~QStyle::State_HasFocus & ~QStyle::State_MouseOver;
Результат:
![enter image description here](https://i.stack.imgur.com/H9yJt.png)