2009-11-04 43 views
24

¿Alguien sabe cómo se podría establecer un color de fondo para toda la ventana de una aplicación Qt?¿Cómo configuro un color de fondo para toda la ventana de una aplicación Qt?

Hasta ahora estoy usando hojas de estilo pero solo puedo descubrir cómo asignar un color de fondo a un widget como QGroupBox o QPushButton. Básicamente, si quiero un fondo negro, ¿cómo podría hacerlo sin ningún borde del fondo original?

Respuesta

24

yo simplemente utilizar una hoja de estilo para toda la ventana.

Por ejemplo, si la ventana está heredando de QWidget, aquí es lo que estoy haciendo:

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

en mi Mac, mi ventana de la aplicación entera es negro (excepto la barra de título).

EDIT: de acuerdo a comentar, aquí es una solución sin necesidad de utilizar archivos de interfaz de usuario y la carga de una hoja de estilo externa

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

El archivo de hoja de estilos (default.qss) es la siguiente:

QWidget { 
    background-color: black; 
} 

Este archivo es parte de un archivo de recursos (stylesheet.qrc):

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

Y aquí es mi proyecto archivo:

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

¿Cómo hago esto en una hoja de estilo? He hecho esto para widgets como QPushButton, pero no puedo imaginarme qué usar para el fondo como un todo. – bryce

+0

Permítanme aclarar algunas cosas también. No utilizo un archivo .ui del diseñador porque he codificado todo a mano.Además, tengo un archivo .qss de hoja de estilos por separado en lugar de poner el código directamente en el código fuente. – bryce

+0

Gracias, sabía que estaba justo debajo de mis narices. QWidget {background-color: black;} era lo que necesitaba. No me di cuenta de que podía usar QWidget directamente. – bryce

13

Esto ha funcionado para mí:

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

Según mi experiencia, para la mayoría de los roles de paleta, ni siquiera necesita obtener la paleta original. Establecer solo una función en una paleta construida por defecto y establecer esa paleta para el widget solo cambiará la función que especificó. –

+0

Creo que ahora también tiene que agregar algo como 'this-> setAutoFillBackground (true);' para hacer que esto funcione. Es lo que tuve que hacer al establecer un color de fondo predeterminado para un widget de esta manera. – gnovice

2

Basta simplemente añadir

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

a su código, le puede dar cualquier color directamente.

0

Para establecer el color de fondo de la combinación

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

en la clase derivada QWidget trabajó para mí. Esta es una variante de la solución de Dirk Eddelbuettel, pero hace uso de la función específicamente para el fondo.

Cuestiones relacionadas