【问题标题】:How do I set a background color for the whole window of a Qt application?如何为 Qt 应用程序的整个窗口设置背景颜色?
【发布时间】:2009-11-04 19:18:17
【问题描述】:

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

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

【问题讨论】:

    标签: c++ qt qstylesheet qwindow


    【解决方案1】:

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

    例如,如果您的窗口是从 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
    

    【讨论】:

    • 如何在样式表中做到这一点?我已经为 QPushButton 之类的小部件完成了此操作,但无法弄清楚将什么用于整个背景。
    • 让我也澄清一些事情。我没有使用设计师提供的 .ui 文件,因为我手动编写了所有内容。另外,我有一个单独的样式表 .qss 文件,而不是将代码直接放入源代码中。
    • 谢谢,我知道它就在我的眼皮底下。 QWidget { background-color: black;} 是我需要的。我没有意识到我可以直接使用 QWidget。
    【解决方案2】:

    这对我有用:

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

    【讨论】:

    • 根据我的经验,对于大多数调色板角色,您甚至不需要获取原始调色板。在默认构造的调色板上仅设置一个角色,并为小部件设置该调色板,只会更改您指定的角色。
    • 我相信您现在还必须添加 this-&gt;setAutoFillBackground(true); 之类的内容才能使其正常工作。以这种方式为小部件设置默认背景颜色时,我必须这样做。
    【解决方案3】:

    只需添加

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

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

    【讨论】:

      【解决方案4】:

      对于小部件,我建议您查看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,那也是一样的。

      【讨论】:

        【解决方案5】:

        设置背景颜色的组合

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

        在 QWidget 派生类中为我工作。这是 Dirk Eddelbuettel 解决方案的一个变体,但使用了专门用于背景的函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-02
          • 1970-01-01
          • 1970-01-01
          • 2011-03-19
          • 1970-01-01
          • 1970-01-01
          • 2011-03-28
          • 2011-01-07
          相关资源
          最近更新 更多