2009-11-04 20 views
24

誰かがQtアプリケーションのウィンドウ全体の背景色を設定する方法を知っていますか?Qtアプリケーションのウィンドウ全体の背景色を設定するにはどうすればよいですか?

これまでスタイルシートを使用していましたが、QGroupBoxQPushButtonなどのウィジェットに背景色を割り当てる方法しか分かりません。基本的に、黒い背景が必要な場合は、元の背景の境界がなくても、どのようにシームレスにすることができますか?

答えて

24

私は単純にウィンドウ全体のためにスタイルシートを使用します。例えば

、あなたの窓は、ここで、QWidgetから継承している場合は、私がやっているものです:私のMac上で

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

を、私の全体のアプリケーションウィンドウは(タイトルバーを除く)黒です。

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ファイルを使用していません。また、私は別のスタイルシート.qssファイルをソースコードに直接記述するのではなく、 – bryce

+0

ありがとう、私はそれが私の鼻のすぐ下にあることを知っていた。 QWidget {背景色:黒;}は私が必要としたものでした。私はQWidgetを直接使用することができないことを認識していませんでした。 – bryce

13

これは私のために働いています

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

ほとんどのパレットロールでは、元のパレットを取得する必要はありません。デフォルトで構築されたパレットに1つのロールだけを設定し、ウィジェットのパレットを設定すると、指定したロールのみが変更されます。 –

+0

これを動作させるには、 'this-> setAutoFillBackground(true);'のようなものを追加する必要があると思います。これは、ウィジェットのデフォルトの背景色をこのように設定するときにやっていたことです。 – gnovice

2

単純に自分のコードに

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

を追加し、あなたが直接、任意の色を与えることができます。 QWidgetの派生クラスで

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

組み合わせが私のために働いた背景色を設定するには

0

。これはDirk Eddelbuettelのソリューションの変種ですが、バックグラウンドに特化した機能を使用しています。

関連する問題