2016-05-17 21 views
0

私は、作業中のプロジェクトのGUIを管理するためにQtを使用することを選択しました。QWidgetのバックグラウンドがすべてのQWidget子に適用されました

QWidgetの下部に画像を適用する方法を見つけた後、追加されたすべてのコンポーネントに影響を与えていることに気付きました。

setStyleSheetメソッドまたはさらにQPixmapで適用されるスタイルが何であれ、これらの要素の背景は常にQWidgetコンテナで定義されたイメージです。

どうすればこの現象を回避できますか?ここで

は私のコードです:

MainMenu::MainMenu(QWidget* Parent, const QPoint& Position, const QSize& Size) : QWidget(Parent) { 

    QString qwidgetStyle = "QWidget {background-image: url(background.jpg); border: 5px solid rgba(3, 5, 28, 1);}"; 
    QString buttonStyle = "color: rgba(73, 123, 176, 1); font-size:30px; background-color: rgba(73, 123, 176, 1);"; 

    move(Position); 
    resize(Size); 
    setStyleSheet(qwidgetStyle); 

    // Menu title 
    QLabel *title = new QLabel(this); 
    title->setText("Menu"); 
    title->setStyleSheet(buttonStyle); 
    title->setAlignment(Qt::AlignCenter); 

    // Menu buttons 
    // Play 
    buttonPlay = new QPushButton("Play"); 
    (*buttonPlay).setEnabled(true); 
    (*buttonPlay).setStyleSheet(buttonStyle); 
    connect(buttonPlay, SIGNAL(clicked()), this, SLOT(handleButton())); 
    // Option 
    buttonOptions = new QPushButton("Options", this); 
    (*buttonOptions).setEnabled(true); 
    (*buttonOptions).setGeometry(250, 175, 100, 50); 
    (*buttonOptions).setStyleSheet(buttonStyle); 
    connect(buttonOptions, SIGNAL(clicked()), this, SLOT(handleButton())); 
    // Quit 
    buttonQuit = new QPushButton("Quit", this); 
    (*buttonQuit).setEnabled(true); 
    (*buttonQuit).setGeometry(250, 275, 100, 50); 
    (*buttonQuit).setStyleSheet(buttonStyle); 
    connect(buttonQuit, SIGNAL(clicked()), this, SLOT(handleButton())); 

    // Layout 
    QGridLayout *layout = new QGridLayout; 
    layout->setMargin(50); 
    layout->addWidget(title, 0, 0, 1, 5); 
    layout->addWidget(buttonPlay, 3, 1, 2, 3); 
    layout->addWidget(buttonOptions, 4, 1, 2, 3); 
    layout->addWidget(buttonQuit, 5, 1, 2, 3); 
    setLayout(layout); 

    show(); 
} 
+0

[this](http://www.qtcentre.org/threads/14099-How-to-stop-child-widgets-from-inheriting-parent-s-StyleSheet-and-use-system-default)助けて?スタイルシートでウィジェットの名前を使用し、 'setObjectName'メソッドを使うことを提案しているようです。 –

+0

あなたは@PaulRooneyの答えを書こうと思いますか?これは実際には解決策です – IAmInPLS

+0

@AlexisP。あなたが望むなら答えてください。現時点で適切な回答をする時間が本当にありません。 –

答えて

1

あなたが遭遇した現象は、次の行で、完全に正常です:

ここ
QString qwidgetStyle = "QWidget {background-image: url(background.jpg); border: 5px solid rgba(3, 5, 28, 1);}"; 
... 
setStyleSheet(qwidgetStyle); 

、あなただけのすべてのqwidgetstyleを適用するためのQtを語りましたあなたのアプリケーションのQWidget、キーワードはQWidgetです。そのため、この特定のオブジェクトにスタイルを適用する場合は、Qtではオブジェクトに名前を設定する方がよいでしょう。あなたのコードで

QLabelQPushButton両方がQWidgetから継承ので、彼らはあなたがそれらに名前を付けたり、あなたが各1のスタイルを指定しない限り、あなたはQWidget用に定義されたスタイルを持っています。

あなたは(あなたが最初の場所でやっていることである)QWidgetから直接継承し、あなたのMainMenu用のスタイルシートを設定したい場合は、あなたが名前を設定し、スタイルを適用する必要があります。

setObjectName("MainMenu"); 
QString qwidgetStyle = "QWidget#MainMenu {background-image: url(background.jpg); border: 5px solid rgba(3, 5, 28, 1);}"; 
setStyleSheet(qwidgetStyle); // here, only your MainMenu will have the style "qwidgetstyle" 

// this is in a CSS, but you can apply it directly from the MainMenu constructor of course 
QWidget, QWidget#MainMenu { 
    background-image: url(background.jpg); 
    border: 5px solid rgba(3, 5, 28, 1); 
} // aplied to all QWidget 

QWidget#MainMenu { 
    color : #9b9b9b; // a nice grey, only applied to MainMenu 
} 

を繰り返しますが、スタイルシートを使用したり、時間をいつ終了する具体的に:あなたは、たとえば、すべてのQWidgetに同じスタイルシートを設定して、あなただけのMainMenuのための特定の色を追加することができます

お知らせあなたのアプリケーションのいたる所に奇妙な色やアラインメントがあります:)。希望が助けてくれる!

NB:コメントに非常に良いリンクをくれた@PaulRooneyにも感謝します。

+0

本当にありがとう!すごくうまくいく!! – MelodyBibi

関連する問題