Como faço para definir a cor de um widget como combobox ou caixa de rotação dupla de fundo?

StackOverflow https://stackoverflow.com/questions/177778

  •  05-07-2019
  •  | 
  •  

Pergunta

Estou tentando definir a cor de fundo para uma caixa de rotação dupla, e eu não tenho certeza qual a função que eu deveria usar.

Eu vi alguns função chamada SetBackgroundRole que aceita uma Qt::ColorRole, mas não estou certo de como usar este como um bem.

Por favor, deixe-me saber, qual é a maneira simples de mudar a cor de um QComboBox ou QDoubleSpinBox fundo?

Foi útil?

Solução

Usando um QPalette não é garantido que funcione para todos os estilos, porque os autores de estilo são restringidos por orientações dos diferentes plataformas e pelo motor tema nativa.

Para se certificar de sua cor de fundo será correta, eu sugiro usar o Qt Estilo folha. Aqui está o que eu fiz para mudar a cor de fundo de um QComboBox:

myComboBox->setStyleSheet("QComboBox { background-color: blue; }");

Eu não especificamente tentou um QSpinBox, mas acho que ele vai trabalhar o mesmo!

Outras dicas

FHE é geralmente correta, mas não leva em conta os widgets (como caixas de rotação e botões / Comboboxes) que usam um papel diferente fundo na paleta. Uma solução mais geral seria algo como isto:

QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);

Como alternativa, você pode olhar para as descrições dos vários papéis de paleta e descobrir o que você deseja, em seguida, aplicá-lo para o widget que contém os outros que você deseja alterar. As mudanças paleta deve propagar para os widgets filhos.

Na verdade, se você olhar para os docs Qt para QPalette no caso de um QComboBox papel do fundo é provavelmente não o que você quer. O que você quer é:

QPalette :: Base Usado principalmente como a cor de fundo para widgets de entrada de texto, mas também pode ser usado para outra pintura - como o fundo de queda combobox para baixo listas e alças da barra de ferramentas. É geralmente de cor branca ou outra cor clara.

Então, aqui está o código que estou usando para definir a cor de fundo de uma caixa de combinação que estou usando para combinar com a cor do widget é em:

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);

Aparentemente, em Qt 4.1 e seguintes, você precisa definir this->setAutoFillBackground( true ); para a paleta de aplicar a cor de fundo.

Enquanto as respostas anteriores pode definir a cor de fundo para um QComboBox não editável, eles não funcionam para um QComboBox editável. Para esse caso, você precisa para obter o QLineEdit Widget utilizado para a edição e redefinir seu fundo.

Aqui está como eu tenho que trabalhar:

    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);

Construir uma paleta que é azul Não importa o que o widget real:

comboBox->setPalette( QPalette( Qt::blue ) );

Eu tentaria algo como

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );

funciona bem para mim!

Sem anteriormente responde funcionou para mim, mas eu fiz uma mistura de todas as respostas e, finalmente, trabalhou em Qt 5,12 :

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top