2015-10-04 76 views
1

我通過子類QPushButton創建自定義按鈕類。但是由於某種原因,在其構造函數中設置該類的CSS不起作用;我必須在例如paintEvent這樣做,那麼一切都很好。我可以只有一個全局文件.qss並將其設置爲整個應用程序,但我希望該類管理自己的樣式。爲什麼我的方法不工作?在QPushButton的子類的構造函數中設置CSS

的代碼:

custompushbutton.h

class CustomPushButton: public QPushButton 
{ 
    Q_OBJECT 

public: 
    explicit CustomPushButton(QWidget *parent = 0); 
    ~CustomPushButton() = default; 
}; 

custompushbutton.cpp

CustomPushButton::CustomPushButton(QWidget *parent) 
    : QPushButton(parent) 
{ 
    setStyleSheet("background-color: black;"); // this does not work 
} 


編輯:對於未來的讀者,如果你有類似的問題(即Qt似乎忽略了你在代碼中設置的CSS),看看你是否沒有在Qt Creator中編輯對象的styleSheet屬性 - 在屬性列表中向下滾動並確保styleSheet是空的而不是BOLD--這是我的情況。如果它是粗體,這意味着Qt仍然使用該空白字段作爲對象的CSS,從而覆蓋您的樣式。要清除它,可以點擊Qt Creator中字段旁邊的小箭頭,也可以打開.ui文件並刪除XML屬性<styleSheet>

感謝JMik指引我朝着正確的方向。

+0

它爲我工作Qt的5.5和Linux –

回答

1

設置樣式表的性能成本驚人地高,特別是如果您正在開發嵌入式系統。

我建議,像你說的,使用全局樣式表,並指定類名,比如:

CustomPushButton { background-color: black; } 

這種方式,所有CustomPushButton將具有相同的風格,該對象將需要更少的時間創造。

至於爲什麼它不起作用的原因,我猜你可能會在創建CustomPushButton後再次意外地更改樣式表。

我測試你的代碼在我的身邊和它的工作,所以它可能有事情做與你的代碼沒有顯示

+0

好了,謝謝你的建議,我會試着在我的代碼中找到問題:) – szczurcio

相關問題