19

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() を使用してアプリ全体のフォントを設定できますが、それでは、フォントを細かく管理せずにネイティブのルック アンド フィールを実現するという目的全体が無効になります。

だから私の質問は、

  1. Qt はシステムのデフォルト フォントをどのように決定しますか。
  2. これが Qt バグの場合、どうすれば回避できますか?
  3. .ui ファイルを使用し、実行時に UI で既定のシステム フォントを使用するにはどうすればよいですか?

私が見つけたいくつかの説明と事実

  1. アプリですべてのテキストにシステムのデフォルト フォントを使用するようにします。

  2. このディスカッションでは、必要かどうかに関係なく、Designer はフォント情報を追加すると述べています。そのため、Qt はシステムのデフォルト フォントではなく、この情報を尊重します。少なくとも誰かがこの情報を手動で削除すると述べたので、実行時に Qt がシステムのデフォルト フォントを選択するようにする必要があります。

  3. 私の開発マシンで QApplication::font() は間違ったデフォルトフォントを返します。しかし、後でコードに追加する QTableView が正しいフォントを使用するのはなぜですか? この情報はどこで入手しましたか?

したがって、QTableView がこの情報を見つけた場所を見つけたら、それをメインで取得し、QApplication::setFont() でアプリ全体に設定できます。次に、残っているのは、すべてのフォント情報を手動で削除することです。うまくいけばうまくいくでしょう。しかし、これがそもそも Qt を使用する理由のようなものですよね。

4

2 に答える 2

12

私は2つの可能な解決策を考えることができます:

  1. アプリケーションにフォントをリソースファイルとしてパックすることができます。これにより、現在のシステムのデフォルトフォントに関係なく、すべてのプラットフォームでそのフォントが使用されます。

  2. QFontクラスには。というメソッドがありdefaultFamily()ます。これを使用して、全体のデフォルトフォントを手動で設定できますQApplication

例(メインメソッド):

QApplication application(argc, argv);
QFont font;
font.setFamily(font.defaultFamily());
application.setFont(font);
...rest of your code...
于 2012-08-29T13:51:58.253 に答える