У меня есть пользовательский класс Delegate
, который наследует от QStyledItemDelegate
. В своем paint()
событии я хотел бы добавить QStyleOptionButton
, который должен быть проверен. Является ли это возможным?Как установить QStyleOptionButton, как флажок с пользовательскими значками
Например, это свойство видимости со значком глаза; и когда кнопка нажата, значок глаза превращается в значок закрытого глаза.
Внутри метода paint()
, это мой текущий код для создания кнопки:
QStyleOptionButton buttonVis;
buttonVis.rect = getButtonVisibilityRect();
buttonVis.iconSize = QSize(sizeX, sizeY);
buttonVis.icon = icon;
buttonVis.state = QStyle::State_Enabled;
buttonVis.features = QStyleOptionButton::None;
QApplication::style()->drawControl(QStyle::CE_PushButton, &buttonVis, painter);
значок, который я загружаю в buttonVis
создана:
QIcon icon;
icon.addPixmap(QPixmap(":/control-visibility.svg"), QIcon::Normal, QIcon::On);
icon.addPixmap(QPixmap(":/control-visibilityNo.svg"), QIcon::Normal, QIcon::Off);
В тот момент, когда я запустите мою программу, кнопка имеет значок с закрытым глазом. Есть ли команда для контроля того, какой значок отображается? Если моя первоначальная компоновка невозможна для реализации, каково правильное направление?
EDIT: Я узнал, как выбрать, какой значок использовать, чтобы имитировать вид флажка. Вместо этого, если линия buttonVis.state = QStyle::State_Enabled;
должна быть:
if (/* current item checkbox checked? */)
buttonVis.state = QStyle::State_Enabled | QStyle::State_On;
else
buttonVis.state = QStyle::State_Enabled | QStyle::State_Off;
Проблема теперь выяснить, что это такое состояние или как установить его из editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
. Проблема в том, что я не могу изменить option
сам, так как это постоянная ссылка. Любые идеи, как это сделать, или как обойти это?
благодарит за ответ. Я нашел, как переключать значки: 'buttonVis.state = QStyle :: State_Enabled | QStyle :: State_Off; 'или' buttonVis.state = QStyle :: State_Enabled | QStyle :: State_On; '. Я попробовал ваше предложенное условие 'option.state.testFlag (QStyle :: State_Sunken) ', но это не похоже на трюк. Кажется, что этот флаг не установлен, когда я нажимаю на свою кнопку, и я не уверен, как заставить его автоматически переключать состояния. В редакторе 'editorEvent' я могу проверить, когда я нажимаю на кнопку, однако я не могу изменить' option', поскольку он передается как 'const &'. – vicrucann