2011-10-19 59 views
0

我想知道其他人如何處理區域設置之間略有不同的Qt樣式表。在我的情況下,差異是在字體選擇和一些小的佈局調整。差異是如此之少,以至於如果有一些選擇器語法可用於在需要的地方生成少數例外情況,那將會很不錯。由於QWidget的locale屬性沒有轉換爲QString,我沒有看到我能做到這一點。Qt樣式表和國際化

儘管我當然可以根據語言環境加載不同的樣式表,但我寧願在語言環境之間不要複製太多的樣式表代碼。還有其他選擇嗎?

回答

0

QLocale不返回的QString,即國家,區域類型,請參閱:

http://doc.qt.io/qt-5/qlocale.html#name

你可以實現一個簡單的輔助功能,只需選擇不同的樣式表或加載額外的一個重寫規則從默認的一個。

+0

右側(命名爲「標題欄的」,這是與cssLocale =「ru_RU」任何部件的後代小部件),但是你怎麼寫選擇器來獲取QLocale :: name()?我試過QWidget [locale =「en_US」]和QWidget [locale.name =「en_US」],都沒有工作。我知道後者是無效的樣式表,但我很有希望。 –

+0

您不寫入選擇器,如果區域設置不是默認值,則可以使用更改編寫另一個樣式表並加載它。或者你可以加載一個不同的樣式表altoguether。我不相信你可以添加這樣的選擇器。 – Andre

+0

好的。這是我的原始問題。有沒有更好的方式來處理樣式表的單行語言環境相關的變化?將整個樣式表複製/粘貼到新文件似乎並不理想。如果這些變化更爲顯着,我會同意你的看法。 –

0

我不知道如果有,你可以做,使這更容易的任何QLocale特有的東西,但你可以做沿着這些線路一些QString的魔力:每當你需要改變

QString styleSheet = "foo { background: %1; }"; 

qApp->setStyleSheet(styleSheet.arg(whatIReallyWantTheBackgroundToBe())); 

然後樣式表中,您可以再次調用setStyleSheet(),只需將不同的參數傳遞給.arg()函數,而不會重複其他字符串。

+0

謝謝。我希望有一些很酷的Qt處理方式,但是你的解決方案和另一個肯定會起作用。 –

1

要使用選擇我加入我自己的財產「cssLocale」通過

setProperty("cssLocale", QLocale().name()); 

我已經子類的QMainWindow和QDialog的,所以我把它架在其構造。每個頂級小部件都獲取屬性集。

在樣式表中,你可以做

*[cssLocale="ru_RU"] #titleBar {