Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从禁用的QComboBox中删除箭头,同时尊重样式_C++_Qt_Qcombobox - Fatal编程技术网

C++ 从禁用的QComboBox中删除箭头,同时尊重样式

C++ 从禁用的QComboBox中删除箭头,同时尊重样式,c++,qt,qcombobox,C++,Qt,Qcombobox,在下图中,第一个QComboBox被禁用: 我想强调一个事实,即不能通过移除禁用的QComboBoxes的箭头来更改该值 我已尝试修改已用于以下目的的样式表: QComboBox::down-arrow:disabled { border: 0; background: transparent; image: none; height: 0; width: 0; } 但是它没有解决问题,并且与我当前的风格(使用qApp->setStyle(“fusion”)设置)冲突:

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

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

我已尝试修改已用于以下目的的样式表:

QComboBox::down-arrow:disabled {
  border: 0;
  background: transparent;
  image: none;
  height: 0;
  width: 0;
}
但是它没有解决问题,并且与我当前的风格(使用
qApp->setStyle(“fusion”)
设置)冲突:


如何获取它?

可以通过使用a并为arrow subcrol()返回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"));