Qt を使用してデスクトップ アプリを構築しています。開発マシンは日本語ロケールの win 7 x64 で、標準システム フォントはMeiryoです。Win 7 のほとんどの UI はこのフォントですが、UI フォントのカスタマイズ ウィンドウ自体などのクラシック/古いプログラムは、MS UI ゴシックとは異なるフォントを使用しています。これは、QtCreator が 1 つの場所で MS UI Gothic を使用してアプリをビルドし、別の場所で Meiryo を使用してアプリをビルドするまで気になりませんでした。たとえば、qlabels、qlineedits、qcombobox はすべて MS UI Gothic を使用しますが、後で追加する qtableview を持つカスタム コンプリータは Meiryo を使用します。
QtCreator のデザイナーでほとんどの UI を作成し、コードに追加したコンプリータを作成しました。The Designer ですべてのウィジェットのフォントを Meiryo に変更すると、もちろんアプリは Meiryo を使用するため、正しく表示されますが、この場合は、win 7 だけではないため、システムのデフォルト フォントを Qt で自動的に選択したいと思います。このプログラムを使用します。
私の懸念をさらに高めたのは、 QApplication::font() が MS UI Gothic を返すことです。これは私の場合は false です。もちろん、QApplication::setFont() を使用してアプリ全体のフォントを設定できますが、それでは、フォントを細かく管理せずにネイティブのルック アンド フィールを実現するという目的全体が無効になります。
だから私の質問は、
- Qt はシステムのデフォルト フォントをどのように決定しますか。
- これが Qt バグの場合、どうすれば回避できますか?
- .ui ファイルを使用し、実行時に UI で既定のシステム フォントを使用するにはどうすればよいですか?
私が見つけたいくつかの説明と事実
アプリですべてのテキストにシステムのデフォルト フォントを使用するようにします。
このディスカッションでは、必要かどうかに関係なく、Designer はフォント情報を追加すると述べています。そのため、Qt はシステムのデフォルト フォントではなく、この情報を尊重します。少なくとも誰かがこの情報を手動で削除すると述べたので、実行時に Qt がシステムのデフォルト フォントを選択するようにする必要があります。
私の開発マシンで QApplication::font() は間違ったデフォルトフォントを返します。しかし、後でコードに追加する QTableView が正しいフォントを使用するのはなぜですか? この情報はどこで入手しましたか?
したがって、QTableView がこの情報を見つけた場所を見つけたら、それをメインで取得し、QApplication::setFont() でアプリ全体に設定できます。次に、残っているのは、すべてのフォント情報を手動で削除することです。うまくいけばうまくいくでしょう。しかし、これがそもそも Qt を使用する理由のようなものですよね。