wake-up-neo.com

Wie stelle ich eine Hintergrundfarbe für das gesamte Fenster einer Qt-Anwendung ein?

Weiß jemand, wie man eine Hintergrundfarbe für das gesamte Fenster einer Qt-Anwendung festlegen kann?

Bisher verwende ich Stylesheets, kann aber nur herausfinden, wie einem Widget eine Hintergrundfarbe wie QGroupBox oder QPushButton zugewiesen wird. Grundsätzlich, wenn ich einen schwarzen Hintergrund haben möchte, wie würde ich ihn ohne Ränder des ursprünglichen Hintergrunds nahtlos gestalten?

25
bryce

Ich würde einfach ein Stylesheet für das gesamte Fenster verwenden.

Wenn Ihr Fenster beispielsweise von QWidget erbt, mache ich Folgendes:

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

Auf meinem Mac ist mein gesamtes Anwendungsfenster schwarz (außer der Titelleiste).

BEARBEITEN: Laut Kommentar ist hier eine Lösung ohne Verwendung von UI-Dateien und Laden eines externen Stylesheets

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

Die Stylesheet-Datei (default.qss) sieht wie folgt aus:

QWidget {
  background-color: black;
}

Diese Datei ist Teil einer Ressourcendatei (stylesheet.qrc):

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

Und hier ist meine Projektdatei:

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

Das hat für mich funktioniert:

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

Einfach hinzufügen 

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

in Ihrem Code können Sie jede Farbe direkt angeben.

4
ajay

Für die Widgets, die ich Ihnen vorschlagen möchte, sehen Sie Wie stelle ich in Qt die Hintergrundfarbe eines Widgets ein, z. . Überprüfen Sie auch Custom Looks mit Qt 4.2 Style Sheets . Denken Sie daran, dass dieser zweite Link zeigt, wie Sie die Stylesheets in diesen Widgets verwenden.

Wenn Sie bereits etwas für Web entwickelt und CSS verwendet haben, ist es dasselbe.

2
Nathan Campos

Die Hintergrundfarbe der Kombination festlegen 

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

in der abgeleiteten QWidget-Klasse arbeitete ich für mich. Dies ist eine Variante der Lösung von Dirk Eddelbuettel, nutzt jedoch die Funktion speziell für den Hintergrund.

0
bvanlew