tags:

views:

1804

answers:

3

Does anyone know if/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?

+1  A: 

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.

Nathan Campos
+5  A: 

This has worked for me:

a = new QApplication(argc, argv);
QPalette pal = a->palette();
pal.setColor(QPalette::Window, Qt::white);
a->setPalette(pal);
Dirk Eddelbuettel
It has been my experience that for most palette roles, you don't even need to get the original palette. Setting just one role on a default constructed palette, and setting that palette for the widget, will only change the role you specified.
Caleb Huitt - cjhuitt
+4  A: 

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
Jérôme
How do I do this in a stylesheet? I've done this for widgets like the QPushButton but cannot figure out what to use for the background as a whole.
bryce
Let me clarify on a few things too. I am not using a .ui file from designer since I hand coded everything. Also, I have a separate stylesheet .qss file versus putting the code directly into the source code.
bryce
Thanks, I knew it was right under my nose. QWidget { background-color: black;} was what I needed. I didn't realized I could directly use QWidget.
bryce