如何为Qt应用程序的整个窗口设置背景颜色?

29

有人知道如何为Qt应用程序的整个窗口设置背景颜色吗?

到目前为止,我正在使用样式表,但只能弄清如何分配小部件(例如QGroupBoxQPushButton)的背景颜色。 基本上,如果我想要黑色背景,我该如何使其无缝,没有原始背景的边框?

5个回答

31

我会为整个窗口使用样式表。

例如,如果您的窗口继承自QWidget,以下是我的做法:

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

在我的 Mac 上,我的整个应用窗口都是黑色的(除了标题栏)。

编辑:根据评论,这里提供一种不使用 UI 文件和加载外部样式表的解决方法。

#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();
}
QWidget {
  background-color: black;
}

这个文件是资源文件(stylesheet.qrc)的一部分:

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

这是我的项目文件:

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

我该如何在样式表中实现这个?我已经为像QPushButton这样的小部件做到了,但是无法弄清楚整个背景要使用什么。 - bryce
让我澄清一些事情。我没有使用设计师的.ui文件,因为我手工编写了所有内容。此外,我有一个单独的样式表.qss文件,而不是直接将代码放入源代码中。 - bryce
谢谢,我就知道它就在我的眼皮底下。QWidget { background-color: black;} 就是我需要的。我没意识到我可以直接使用 QWidget。 - bryce

16

这对我有用:

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

根据我的经验,对于大多数调色板角色,您甚至不需要获取原始调色板。 只需在默认构造的调色板上设置一个角色,并将该调色板设置为小部件的调色板,就只会更改您指定的角色。 - Caleb Huitt - cjhuitt
我相信现在你也需要添加类似于 this->setAutoFillBackground(true); 这样的代码才能使其正常工作。这是我在设置小部件的默认背景颜色时所做的操作。 - gnovice

5
只需要添加 <\p>。
setStyleSheet("background-color: white;");

对于你的代码,你可以直接给出任何颜色。


2

0

为了设置背景颜色,需要使用以下组合

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

在QWidget派生类中对我有效。这是Dirk Eddelbuettel解决方案的变体,但使用了专门用于背景的函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接