How do I set a background color for the whole window of a Qt application?

93.6k views Asked by At

Does anyone know how one would be able to set a background color for the whole window of a Qt application?

So far I am using stylesheets but can only figure out how to assign a background color to a widget such as QGroupBox or QPushButton. Basically, if I want a black background how would I make it seamless without any borders of the original background?

5

There are 5 answers

3
Jérôme On BEST ANSWER

I would simply use a Style Sheet for the whole window.

For instance, if your window is inheriting from QWidget, here is what I'm doing :

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

On my Mac, my whole application window is black (except the title bar).

EDIT : according to comment, here is a solution without using ui files and loading an external style sheet

#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();
}

The style sheet file (default.qss) is as follow :

QWidget {
  background-color: black;
}

This file is part of a resource file (stylesheet.qrc) :

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

And here is my project file :

TARGET = StyleSheet
TEMPLATE = app
SOURCES += main.cpp
RESOURCES += stylesheet.qrc
0
Nathan Campos On

For the widgets I suggest you to see In Qt, how do I set the background color of a widget like combobox or double spin box?. Also check Custom Looks using Qt 4.2 Style Sheets. Remember that this second link shows you how to use the stylesheets in these widgets.

If you have already developed something for Web and used CSS, it's the same thing.

2
Dirk is no longer here On

This has worked for me:

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

To set the background color the combination

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

in the QWidget derived class worked for me. This is a variant of Dirk Eddelbuettel's solution but makes use of the function specifically for the background.

0
ajay On

Simply just add

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

to your code, you can give any color directly.