2009-11-04 21 views
24

Czy ktoś wie, jak można ustawić kolor tła dla całego okna aplikacji Qt?Jak ustawić kolor tła dla całego okna aplikacji Qt?

Do tej pory używam arkuszy stylów, ale mogę się tylko dowiedzieć, jak przypisać kolor tła do widżetu, takiego jak QGroupBox lub QPushButton. Zasadniczo, jeśli chcę mieć czarne tło, w jaki sposób mogę je ustawić bez żadnych granic oryginalnego tła?

Odpowiedz

24

ja po prostu użyć arkusza stylów dla całego okna.

Na przykład, jeśli okno jest dziedziczenie z QWidget, tutaj jest to, co robię:

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

Na moim Mac, całe okno aplikacji jest czarny (z wyjątkiem paska tytułowego).

EDIT: Według komentarza, o to rozwiązanie bez korzystania z plików i ładowanie ui zewnętrznego arkusza stylów

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

plik arkusza stylów (default.qss) jest następująca:

QWidget { 
    background-color: black; 
} 

Ten plik jest częścią pliku zasobów (stylesheet.qrc):

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

I tu jest mój projekt Plik:

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

Jak to zrobić w arkuszu stylów? Zrobiłem to dla widżetów, takich jak QPushButton, ale nie mogę dowiedzieć się, co używać w tle jako całości. – bryce

+0

Pozwolę sobie również wyjaśnić kilka rzeczy. Nie używam pliku .ui od projektanta, ponieważ zakodowałem wszystko.Ponadto mam oddzielny plik .qss arkusza stylów w przeciwieństwie do umieszczania kodu bezpośrednio w kodzie źródłowym. – bryce

+0

Dzięki, wiedziałem, że to było tuż pod moim nosem. QWidget {background-color: black;} był tym, czego potrzebowałem. Nie zdawałem sobie sprawy, że mogę bezpośrednio użyć QWidget. – bryce

13

ten pracował dla mnie:

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

Z mojego doświadczenia wynika, że ​​w przypadku większości ról palet nie trzeba nawet uzyskiwać oryginalnej palety. Ustawienie tylko jednej roli na domyślnej palecie skonstruowanej i ustawienie tej palety dla widgetu spowoduje zmianę tylko określonej roli. –

+0

Wierzę, że musisz teraz dodać coś w rodzaju 'this-> setAutoFillBackground (true) ;, aby to zadziałało. To właśnie musiałem zrobić, ustawiając domyślny kolor tła widżetu w ten sposób. – gnovice

2

Wystarczy tylko dodać

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

do kodu, można nadać dowolny kolor bezpośrednio.

0

Aby ustawić kolor tła kombinację

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

w klasie QWidget pochodzącego pracował dla mnie. Jest to wariant rozwiązania Dirk Eddelbuettel, ale korzysta z funkcji specjalnie dla tła.