web-dev-qa-db-fra.com

Comment définir une couleur d'arrière-plan pour toute la fenêtre d'une application Qt?

Est-ce que quelqu'un sait comment on pourrait définir une couleur de fond pour toute la fenêtre d'une application Qt?

Jusqu'à présent, j'utilise des feuilles de style, mais je ne peux que comprendre comment attribuer une couleur d'arrière-plan à un widget tel que QGroupBox ou QPushButton. En gros, si je veux un fond noir, comment pourrais-je le rendre transparent sans aucune bordure du fond d'origine?

25
bryce

Je voudrais simplement utiliser une feuille de style pour la fenêtre entière.

Par exemple, si votre fenêtre hérite de QWidget, voici ce que je fais:

MainWindow::MainWindow(QWidget *parent) : QWidget(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setStyleSheet("background-color: black;");
}

Sur mon Mac, toute la fenêtre de l'application est noire (sauf la barre de titre).

EDIT: selon le commentaire, voici une solution sans utiliser de fichiers ui ni charger une feuille de style

#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtGui/QVBoxLayout>
#include <QtGui/QPushButton>
#include <QtCore/QFile>

int main(int ArgC, char* ArgV[])
{
QApplication MyApp(ArgC, ArgV);

QMainWindow* pWindow = new QMainWindow;
QVBoxLayout* pLayout = new QVBoxLayout(pWindow);
pWindow->setLayout(pLayout);

QPushButton* pButton = new QPushButton("Test", pWindow);
pLayout->addWidget(pButton);

QFile file(":/qss/default.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());

qApp->setStyleSheet(styleSheet);

pWindow->setVisible(true);
MyApp.exec();
}

La feuille de style (default.qss) est la suivante:

QWidget {
  background-color: black;
}

Ce fichier fait partie d'un fichier de ressources (stylesheet.qrc):

<RCC>
  <qresource prefix="/qss">
    <file>default.qss</file>
  </qresource>
</RCC>

Et voici mon dossier de projet:

TARGET = StyleSheet
TEMPLATE = app
SOURCES += main.cpp
RESOURCES += stylesheet.qrc
26
Jérôme

Cela a fonctionné pour moi:

a = new QApplication(argc, argv);
QPalette pal = a->palette();
pal.setColor(QPalette::Window, Qt::white);
a->setPalette(pal);
13

Ajoutez simplement 

setStyleSheet("background-color: white;");

à votre code, vous pouvez donner n'importe quelle couleur directement.

4
ajay

Pour les widgets, je vous suggère de voir Dans Qt, comment définir la couleur d’arrière-plan d’un widget tel que la liste déroulante ou la boîte à double rotation? . Vérifiez également Apparences personnalisées à l'aide des feuilles de style Qt 4.2 . Rappelez-vous que ce deuxième lien vous montre comment utiliser les feuilles de style de ces widgets.

Si vous avez déjà développé quelque chose pour le Web et utilisé CSS, c'est la même chose.

2
Nathan Campos

Pour définir la couleur de fond de la combinaison 

setPaletteBackgroundColor(Qt::black);
setAutoFillBackground(true);

dans la classe dérivée QWidget a travaillé pour moi. Ceci est une variante de la solution de Dirk Eddelbuettel mais utilise la fonction spécifiquement pour l'arrière-plan.

0
bvanlew