Qt样式表和国际化

时间:2011-10-19 15:05:32

标签: qt internationalization stylesheet

我想知道其他人如何处理区域设置之间略有不同的Qt样式表。就我而言,差异在于字体选择和一些小的布局调整。差异很小,如果有一些选择器语法可以用来在需要的地方制作一些例外,那就太好了。我没有看到我怎么能这样做,因为QWidget的locale属性没有转换为QString。

虽然我当然可以根据区域设置加载不同的样式表,但我宁愿不在区域设置之间复制那么多样式表代码。还有其他选择吗?

3 个答案:

答案 0 :(得分:1)

要使用选择器,我通过

添加了我自己的属性“cssLocale”
setProperty("cssLocale", QLocale().name());

我已经将QMainWindow和QDialog子类化了,所以我在它们的构造函数中进行了设置。每个顶级窗口小部件都获取属性集。

在样式表中,您可以执行

*[cssLocale="ru_RU"] #titleBar {

(名为“titleBar”的小部件,它是cssLocale =“ru_RU”的任何小部件的后代)

答案 1 :(得分:0)

QLocale会返回一个QString,即国家/地区类型,请参阅:

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

您可以实现一个简单的辅助函数来简单地选择不同的样式表或加载一个覆盖默认样式表的额外样式表。

答案 2 :(得分:0)

我不确定是否有任何QLocale特定的东西可以让你更容易,但你可以沿着这些方面做一些QString魔术:

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

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

然后,无论何时需要更改样式表,都可以再次调用setStyleSheet()并将其他参数传递给.arg()函数,而不会复制其余字符串。