2011-10-19 7 views
0

私は、他の人がどのようにロケール間で少し異なるQtスタイルシートを扱っているのだろうと思っていました。私の場合、違いはフォントの選択とレイアウトの微妙な調整です。相違点はごくわずかなので、セレクタの構文が必要な場合にはいくつかの例外を行うために使用することができます。私はQWidgetのロケールプロパティがQStringに変換されないので、私はこれをどうやってできるのか分かりませんでした。Qtスタイルシートと国際化

ロケールに基づいて別のスタイルシートを読み込むことはできますが、ロケール間であまりにも多くのスタイルシートコードを複製したくないです。他のオプションはありますか?

答えて

0

QLocaleが見る、すなわち国・地域型の、のQStringを返す行います

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

あなたは単に別のスタイルシートを選択するかのルールを上書きする追加の1をロードするために、単純なヘルパー関数を実装することができデフォルトのものから

+0

*[cssLocale="ru_RU"] #titleBar { 

(cssLocale =「ru_RU」を持つ任意のウィジェットの子孫である「titleBarの」という名前のウィジェット)を行うことができますが、どのように書きますかQLocale :: name()を得るためのセレクタ?私はQWidget [locale = "en_US"]とQWidget [locale.name = "en_US"]を試してみましたが、どちらもうまくいきませんでした。私は後者が無効なスタイルシートであることを知っていますが、私は期待していました。 –

+0

セレクタを記述しないで、変更が加えられた別のスタイルシートを作成し、ロケールがデフォルトでない場合はロードします。あるいは、別のスタイルシートを一緒にロードすることもできます。私はあなたがそのようなセレクタを追加できるとは思わない。 – Andre

+0

それは私の元々の質問です。スタイルシートに1行のロケールに関連する変更を処理するより良い方法はありますか?スタイルシート全体を新しいファイルにコピー/ペーストするのは理想的ではないようです。変更がより重要であれば、私はあなたに同意するでしょう。 –

0

私はあなたがこれを容易にするために行うことができます任意のQLocale固有のものがありますかどうかわからないんだけど、あなたはこれらの線に沿っていくつかのQStringの魔法を行うことができます:

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

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

次に変更する必要があるときsetStyleSheet()をもう一度呼び出して、残りの文字列を複製せずに.arg()関数に別のパラメータを渡すことができます。

+0

ありがとうございます。私はこれを処理するクールなQtの方法があることを期待していましたが、あなたのソリューションと他のソリューションは確かに動作します。 –

1

セレクタを使用するには、私はすでにQMainWindowとQDialogはので、私は自分のコンストラクタでそれを設定サブクラス化しました

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

を経由して自分の財産「cssLocale」を追加しました。各トップレベルウィジェットはプロパティセットを取得します。

スタイルシートで

、あなたは