【问题标题】:Remove arrow from disabled QComboBox while respecting style在尊重样式的同时从禁用的 QComboBox 中删除箭头
【发布时间】:2018-11-27 16:42:59
【问题描述】:

在下图中,第一个QComboBox被禁用:

我想强调一个事实,即不能通过删除禁用QComboBoxes 的箭头来更改该值。

我已经尝试修改已经习惯的样式表:

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

但这并不能解决问题,并且与我当前的样式冲突(使用qApp->setStyle("fusion")设置):

我怎样才能得到它?

【问题讨论】:

    标签: c++ qt qcombobox


    【解决方案1】:

    这个技巧可以通过使用 QProxyStyle 并为箭头子控件 (QProxyStyle::subControlRect) 返回 null QRect 来完成。 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"));
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多