Combobox 또는 Double Spin Box와 같은 위젯의 배경색을 어떻게 설정합니까?
문제
더블 스핀 박스의 배경색을 설정하려고 노력하고 있으며 어떤 기능을 사용해야하는지 잘 모르겠습니다.
나는 어떤 기능이 부르는 것을 보았다 SetBackgroundRole
수락하는 a Qt::ColorRole
, 그러나 나는 이것을 어떻게 사용하는지 잘 모르겠습니다.
친절하게 알려주세요. QComboBox
또는 QDoubleSpinBox
?
해결책
사용 a QPalette
스타일 저자는 다른 플랫폼의 지침과 기본 테마 엔진에 의해 제한되기 때문에 모든 스타일에 대해 작동하지는 않습니다.
배경색이 올바른지 확인하기 위해 QT 스타일 시트. 다음은 내가 QComboBox
:
myComboBox->setStyleSheet("QComboBox { background-color: blue; }");
나는 구체적으로 시도하지 않았다 QSpinBox
, 그러나 나는 그것이 똑같이 작동 할 것 같아요!
다른 팁
FHE는 일반적으로 정확하지만 팔레트에서 다른 배경 역할을 사용하는 위젯 (스핀 박스 및 버튼/콤보해스 등)을 설명하지 않습니다. 보다 일반적인 해결책은 다음과 같은 것입니다.
QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);
또는 다양한 팔레트 역할에 대한 설명을 살펴보고 원하는 팔레트 역할을 파악한 다음 변경하려는 다른 팔레트 역할을 파악한 다음 변경하려는 위젯에 적용 할 수 있습니다. 팔레트 변경은 어린이 위젯으로 전파되어야합니다.
실제로 Qcombobox의 경우 QPalette에 대한 QT 문서를 보면 배경 역할은 아마도 원하는 것이 아닙니다. 당신이 원하는 것은 :
QPALETTE ::베이스 텍스트 항목 위젯의 배경색으로 주로 사용되지만 Combobox 드롭 다운 목록 및 도구 모음 핸들의 배경과 같은 다른 그림에도 사용할 수 있습니다. 일반적으로 흰색 또는 다른 밝은 색입니다.
그래서 여기에 사용중인 코드는 다음과 같은 위젯의 색상과 일치하는 콤보 상자의 배경색을 설정합니다.
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
분명히 QT 4.1에서 this->setAutoFillBackground( true );
팔레트가 배경색을 적용 할 수 있습니다.
이전 답변은 부탁 할 수없는 사람의 배경색을 설정할 수 있습니다. QComboBox
, 그들은 편집 가능한 일을하지 않습니다 QComboBox
. 이 경우, 당신은 다음을 도출해야합니다 QLineEdit
편집에 사용되는 위젯 및 배경을 재설정합니다.
내가 작동하는 방법은 다음과 같습니다.
QComboBox *myComboBox = new QComboBox();
myComboBox->setEditable(true);
QColor backColor = QColor(246, 230, 230);
QLineEdit *lineEditor = myComboBox->lineEdit();
QPalette pal = lineEditor->palette();
pal.setColor(QPalette::Base, backColor);
lineEditor->setPalette(pal);
실제 위젯에 상관없이 파란색 인 팔레트를 구성하십시오.
comboBox->setPalette( QPalette( Qt::blue ) );
나는 같은 것을 시도 할 것이다
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );
나를 위해 잘 작동합니다!
이전에 답변은 저를 위해 일하지 않았지만 모든 응답을 혼합하여 마침내 작업했습니다. QT 5.12:
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);