Qt таблицы стилей и интернационализация - PullRequest
0 голосов
/ 19 октября 2011

Мне было интересно, как другие обрабатывают таблицы стилей Qt, которые немного отличаются в разных локалях. В моем случае различия заключаются в выборе шрифта и некоторых незначительных изменениях макета. Различий настолько мало, что было бы неплохо, если бы был какой-то синтаксис селектора, который я мог бы использовать, чтобы сделать несколько исключений, где это необходимо. Я не видел, как я мог это сделать, поскольку свойство locale QWidget не конвертируется в QString.

Хотя я, конечно, мог бы загружать другую таблицу стилей в зависимости от локали, я бы предпочел не дублировать столько кода стилей между локалями. Есть ли другие варианты?

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Чтобы использовать селекторы, я добавил свое собственное свойство "cssLocale" через

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

Я уже подклассил QMainWindow и QDialog, поэтому я установил его в их конструкторе.Каждый виджет верхнего уровня получает набор свойств.

В таблице стилей вы можете сделать

*[cssLocale="ru_RU"] #titleBar {

(виджет с именем "titleBar", который является потомком любого виджета с cssLocale = "ru_RU ")

0 голосов
/ 19 октября 2011

Я не уверен, есть ли какие-то вещи, специфичные для QLocale, которые вы можете сделать, чтобы сделать это проще, но вы могли бы сделать некоторую магию QString следующим образом:

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

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

Затем, когда вам нужно изменить таблицу стилей, вы можете снова вызвать setStyleSheet () и просто передать другой параметр в функцию .arg () без дублирования остальной части вашей строки.

0 голосов
/ 19 октября 2011

QLocale возвращает QString, а именно тип страны-региона, см .:

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

Вы можете реализовать простую вспомогательную функцию, чтобы просто выбрать другую таблицу стилей или загрузитьдополнительный, перезаписывающий правила по умолчанию.

...