Удалить стрелку из отключенного QComboBox при соблюдении стиля - PullRequest
0 голосов
/ 27 ноября 2018

На рисунке ниже первый QComboBox отключен:

enter image description here

Я хочу подчеркнуть тот факт, что значение не может быть изменено с помощьюснятие стрелки отключено QComboBox es.

Я пытался изменить уже используемую таблицу стилей:

QComboBox::down-arrow:disabled {
  border: 0;
  background: transparent;
  image: none;
  height: 0;
  width: 0;
}

Но это не решает проблему и не конфликтует с моим текущим стилем (установлен с использованием qApp->setStyle("fusion")):

enter image description here

Как я могу получить это?

1 Ответ

0 голосов
/ 27 ноября 2018

Трюк можно сделать, используя QProxyStyle и возвращая ноль QRect для субконтроля стрелок (QProxyStyle::subControlRect).A QProxyStyle позволяет вам варьировать определенное поведение стиля без необходимости реализации совершенно нового стиля (оно оборачивает оригинальный стиль).

class MyProxyStyle : public QProxyStyle {
public:
  MyProxyStyle(const QString& base_style_name) : QProxyStyle(base_style_name) {}

  QRect MyProxyStyle::subControlRect(QStyle::ComplexControl cc,
                                     const QStyleOptionComplex* option,
                                     QStyle::SubControl sc,
                                     const QWidget* widget) const override
  {
    if (cc == CC_ComboBox && sc == SC_ComboBoxArrow && !widget->isEnabled()) return QRect();
    return QProxyStyle::subControlRect(cc, option, sc, widget);
  }
};

// ...

qApp->setStyle(new MyProxyStyle("fusion"));

Результат:

enter image description here

...