2014-12-03 51 views
0

我對Qt樣式表的管理有問題。Qt樣式表管理和性能

我有一個很大的Qt應用程序,可以動態改變它的顏色主題。爲此,我創建了幾個樣式表(一個按主題 - 它們很大)。當用戶想要更改顏色主題時,他點擊一個按鈕,該按鈕調用方法setStylesheet(QString)MainWindow。這實際上工作,但我的GUI在此過程中凍結8-10秒。

爲了減少延遲,我試圖用unpolish(QApplication * application)QStyle::polish(QApplication * application)。性能相當令人印象深刻(少於一秒),但幾個Widget屬性不會更新,例如QToolButton的圖標屬性。此外,即使我們的自定義小部件繼承自常見小部件類(QFrameQwidgetQStackedWidget等等),它們也不會更新。 我想用polish方法錯過什麼嗎?是否有另一種方式來更好地更新我的應用程序的樣式?

回答

0

您可以使用setPaletteQPalette

void QApplication::setPalette (const QPalette & palette, const char * className = 0) [static] 

更改默認應用程序調色板調色板。

調色板可以根據當前GUI樣式被改變在 將QStyle ::拋光()。

警告:請勿將此功能與Qt樣式表一起使用。 當使用樣式表,小部件的調色板可以使用「顏色」,「背景色」,「選擇顏色」, 「選擇背景色」和「複用背景色」定製 。

注:有些款式不使用調色板的所有圖紙,爲 例如,如果他們利用原生主題引擎。

如果你想從一個地方改變所有小部件的主題,這是好方法。
我在大型應用程序中使用它,它工作良好。

但是如果你設定或者的styleSheet調色板一個小部件,它不是讓你的總主題。

QPalette myPalette; 
myPalette.setColor(QPalette::Background, Qt::red); 
myPalette.setColor(QPalette::WindowText, QColor(150, 150, 150)); 
qApp->setPalette(myPalette); 
+0

是的,但是這代表了很多工作。我堅持與CSS文件,我必須使用它們。不管怎麼說,還是要謝謝你。 – 2014-12-03 16:22:06

+0

@AlJah:你說得對,當我從stylSheet切換到'QPalette'時,我需要一個多星期的時間。 您的歡迎。 – 2014-12-03 16:31:07