【发布时间】:2009-11-04 19:18:17
【问题描述】:
有谁知道如何为 Qt 应用程序的整个窗口设置背景颜色?
到目前为止,我正在使用样式表,但只能弄清楚如何为 QGroupBox 或 QPushButton 等小部件分配背景颜色。基本上,如果我想要一个黑色背景,我该如何让它无缝而没有原始背景的任何边框?
【问题讨论】:
标签: c++ qt qstylesheet qwindow
有谁知道如何为 Qt 应用程序的整个窗口设置背景颜色?
到目前为止,我正在使用样式表,但只能弄清楚如何为 QGroupBox 或 QPushButton 等小部件分配背景颜色。基本上,如果我想要一个黑色背景,我该如何让它无缝而没有原始背景的任何边框?
【问题讨论】:
标签: c++ qt qstylesheet qwindow
我会简单地为整个窗口使用样式表。
例如,如果您的窗口是从 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();
}
样式表文件(default.qss)如下:
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
【讨论】:
这对我有用:
a = new QApplication(argc, argv);
QPalette pal = a->palette();
pal.setColor(QPalette::Window, Qt::white);
a->setPalette(pal);
【讨论】:
this->setAutoFillBackground(true); 之类的内容才能使其正常工作。以这种方式为小部件设置默认背景颜色时,我必须这样做。
只需添加
setStyleSheet("background-color: white;");
对你的代码,你可以直接给任何颜色。
【讨论】:
对于小部件,我建议您查看In Qt, how do I set the background color of a widget like combobox or double spin box?。另请检查Custom Looks using Qt 4.2 Style Sheets。请记住,第二个链接向您展示了如何在这些小部件中使用样式表。
如果你已经为 Web 开发了一些东西并使用了 CSS,那也是一样的。
【讨论】:
设置背景颜色的组合
setPaletteBackgroundColor(Qt::black);
setAutoFillBackground(true);
在 QWidget 派生类中为我工作。这是 Dirk Eddelbuettel 解决方案的一个变体,但使用了专门用于背景的函数。
【讨论】: