2016-01-26 33 views
0

我想爲我所有的按鈕設置一個全局樣式表。 這樣做是爲了像下面這樣一個特定的按鈕,按預期工作:全局樣式表沒有完全工作

button->setStyleSheet(QString("QPushButton:focus {") + 
            "outline: 0;" + 
            "background-color: #" + BUTTON_HIGHLIGHT_BG_COLOR + "; " + 
            "color: #"   + BUTTON_HIGHLIGHT_TXT_COLOR + "; " + 
           "}" 
        ); 

但是,如果我讓全球性的,就像這樣:

qApp->setStyleSheet(QString("QPushButton:focus {") + 
            "outline: 0;" + 
            "background-color: #" + BUTTON_HIGHLIGHT_BG_COLOR + "; " + 
            "color: #"   + BUTTON_HIGHLIGHT_TXT_COLOR + "; " + 
          "}" 
        ); 

聚焦按鈕得到正確的字體顏色,但他們似乎沒有背景(儘管我爲它們設置的背景與主佈局的背景不同)。

BUTTON_HIGHLIGHT_BG_COLORBUTTON_HIGHLIGHT_TXT_COLOR是顏色的字符串(例如「FF0000」)

可能是因爲它適用於特定窗口小部件,但全局失敗?

更新:

我跟着@ ThorngardSO答案,並最終通過改變解決了這個問題:

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

到:

stackedWidget->setStyleSheet("QStackedWidget { background-color: white; }"); 

這是在加載畫面(第一屏)

回答

3

你應該試着將它縮小盡可能:

  • 是這是全局樣式表中唯一的規則?如果不是,則刪除所有其他規則以進行測試,看看會發生什麼。
  • 清楚地瞭解按鈕的widget級別(也許它是groupbox的子級,它本身就是主窗口的子級),然後檢查:
  • 在層次結構中執行任何這些小部件樣式表設置?如果是的話,刪除這些樣式表用於測試目的,並看看會發生什麼。
  • 您是否隨時在任何層次中的任何小部件上調用setPalette()setAutoFillBackground()等函數(或在設計器中設置自動填充背景屬性)?如果是的話,刪除這些電話,看看會發生什麼。
+0

1.我只有2個全球規則,縮小到1,沒有幫助。 2.它是一個「groupbox」的孩子,它是一個主窗口的孩子。 3.'groupbox'本身有一個樣式表 - 我刪除它,另一個是'QLabel'的孩子有一個樣式表 - 將其刪除。沒有幫助。 4.第5號。對我來說奇怪的是,它可以在'button-> setStylesheet ...'上工作,'但不能在'qApp-> setStylesheet'上工作。 –

+0

它工作!在加載屏幕上我有一個'stackedWidget-> setStyleSheet'。我看到現在問題來自哪裏。謝謝 –

+0

很高興它成功了 - 樣式表的級聯/繼承通常會導致起初看起來很奇怪的行爲。 – ThorngardSO

2

不是這是你的問題m,但是你在運行時從零碎中組裝那個常量字符串。不要這樣做。相反,只需簡單地將它們放在一起,就可以簡單地在C和C++中連接字符串文字。

qApp->setStyleSheet(QStringLiteral(
    "QPushButton:focus {" 
    "outline: 0;" 
    "background-color: #" BUTTON_HIGHLIGHT_BG_COLOR "; " 
    "color: #" BUTTON_HIGHLIGHT_TXT_COLOR "; " 
    "}" 
)); 

如果你想要的顏色,在運行時更換,使用%3'-取代:

qApp->setStyleSheet(QStringLiteral(
    "QPushButton:focus {" 
    "outline: 0;" 
    "background-color: #%1; " 
    "color: #%2; " 
    "}" 
).arg(background).arg(foreground)); 
+0

即使我寫''background-color:red;「',它不起作用。還要注意'font-color'起作用。 –

+0

無論如何,這不是一個問題的答案......應該是一個評論 –

+0

@AlaaM如果只有評論可能是那麼長:) –