2009-11-04 5 views
24

Кто-нибудь знает, как можно установить цвет фона для всего окна приложения Qt?Как установить цвет фона для всего окна приложения Qt?

До сих пор я использую таблицы стилей, но могу только выяснить, как назначить цвет фона для такого виджетов, как QGroupBox или QPushButton. В принципе, если мне нужен черный фон, как бы я сделал его бесшовным без каких-либо границ исходного фона?

ответ

24

Я бы просто использовать таблицы стилей для всего окна.

Например, если окно наследуется от QWidget, вот что я делаю:

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

На моем Mac, все мое окно приложения черный (кроме заголовка).

EDIT: согласно комментировать, здесь есть решение без использования 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 
+0

Как это сделать в таблице стилей? Я сделал это для виджетов, таких как QPushButton, но не могу понять, что использовать для фона в целом. – bryce

+0

Позвольте мне пояснить и некоторые вещи. Я не использую файл .ui от дизайнера, так как я все кодировал.Кроме того, у меня есть отдельный файл .hs таблицы стилей и ввод кода непосредственно в исходный код. – bryce

+0

Спасибо, я знал, что это было прямо под моим носом. QWidget {background-color: black;} был тем, что мне нужно. Я не понял, что могу напрямую использовать QWidget. – bryce

2

Для виджетов я предлагаю вам посмотреть 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. Помните, что эта вторая ссылка показывает, как использовать таблицы стилей в этих виджетах.

Если вы уже разработали что-то для Интернета и использовали CSS, это то же самое.

13

Это работает для меня:

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

Было моим опытом, что для большинства ролей палитры вам даже не нужно приобретать оригинальную палитру. Установка только одной роли в построенной по умолчанию палитре и установка этой палитры для виджета изменят только указанную роль. –

+0

Я верю, что теперь вам нужно добавить что-то вроде 'this-> setAutoFillBackground (true);' заставить это работать. Это то, что я должен был сделать, когда устанавливал цвет фона по умолчанию для виджета таким образом. – gnovice

2

Просто просто добавьте

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

в код, вы можете дать любой цвет непосредственно.

0

Чтобы установить цвет фона сочетание

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

в производном классе QWidget работал для меня. Это вариант решения Dirk Eddelbuettel, но он использует функцию специально для фона.

Смежные вопросы