我想知道其他人如何处理区域设置之间略有不同的Qt样式表。在我的情况下,差异是在字体选择和一些小的布局调整。差异是如此之少,以至于如果有一些选择器语法可用于在需要的地方生成少数例外情况,那将会很不错。由于QWidget的locale属性没有转换为QString,我没有看到我能做到这一点。Qt样式表和国际化
尽管我当然可以根据语言环境加载不同的样式表,但我宁愿在语言环境之间不要复制太多的样式表代码。还有其他选择吗?
我想知道其他人如何处理区域设置之间略有不同的Qt样式表。在我的情况下,差异是在字体选择和一些小的布局调整。差异是如此之少,以至于如果有一些选择器语法可用于在需要的地方生成少数例外情况,那将会很不错。由于QWidget的locale属性没有转换为QString,我没有看到我能做到这一点。Qt样式表和国际化
尽管我当然可以根据语言环境加载不同的样式表,但我宁愿在语言环境之间不要复制太多的样式表代码。还有其他选择吗?
QLocale不返回的QString,即国家,区域类型,请参阅:
http://doc.qt.io/qt-5/qlocale.html#name
你可以实现一个简单的辅助功能,只需选择不同的样式表或加载额外的一个重写规则从默认的一个。
我不知道如果有,你可以做,使这更容易的任何QLocale特有的东西,但你可以做沿着这些线路一些QString的魔力:每当你需要改变
QString styleSheet = "foo { background: %1; }";
qApp->setStyleSheet(styleSheet.arg(whatIReallyWantTheBackgroundToBe()));
然后样式表中,您可以再次调用setStyleSheet(),只需将不同的参数传递给.arg()函数,而不会重复其他字符串。
谢谢。我希望有一些很酷的Qt处理方式,但是你的解决方案和另一个肯定会起作用。 –
要使用选择我加入我自己的财产“cssLocale”通过
setProperty("cssLocale", QLocale().name());
我已经子类的QMainWindow和QDialog的,所以我把它架在其构造。每个顶级小部件都获取属性集。
在样式表中,你可以做
*[cssLocale="ru_RU"] #titleBar {
右侧(命名为“标题栏的”,这是与cssLocale =“ru_RU”任何部件的后代小部件),但是你怎么写选择器来获取QLocale :: name()?我试过QWidget [locale =“en_US”]和QWidget [locale.name =“en_US”],都没有工作。我知道后者是无效的样式表,但我很有希望。 –
您不写入选择器,如果区域设置不是默认值,则可以使用更改编写另一个样式表并加载它。或者你可以加载一个不同的样式表altoguether。我不相信你可以添加这样的选择器。 – Andre
好的。这是我的原始问题。有没有更好的方式来处理样式表的单行语言环境相关的变化?将整个样式表复制/粘贴到新文件似乎并不理想。如果这些变化更为显着,我会同意你的看法。 –