

QtでLabelをGridLayout上に等間隔で並べていて、そこに文字を表示しています  
普段はそのまま綺麗に表示されるのですが、外国語フォント(韓国語、中国語)で表示するとフォント自体の余白が大きいのか  
グリッド上のラベルでギリギリのフォントサイズで文字を表示するとラベルが微妙にサイズが大きくなってしまい、  
日本語とその他の言語に切り替えた瞬間にデザインが崩れてしまいます

外国語フォントで崩れないようにフォントを小さくすると、今度は日本語が小さくなりすぎて非常に見づらくなります  
フォントが少々はみ出しそうになっても、グリッド上のサイズが変わらないようにするいい方法は無いでしょうか  
とはいえ、画面さすがが変わってもバランスが崩れないようにグリッドに配置しているので大きくなったときはなんとなく上手く行くのですが  
画面が小さくなったときにはうまいことサイズは変わって欲しいのですが・・・

フォント内の余白をうまいことコントロールする方法も無さそうだし  
ラベルのサイズに合わせてフォントが自動的に縮小するというような都合の良い方法もあれば知りたいです

日本語はOSについてきたTAKAOゴシック、韓国語、中国語はグーグルが公開している  
NotoSansKR-Regular.otf,NotoSansSC-Regular.otf,NotoSansTC-Regular.otfを使用しています

QLabelにはStylesheetを

[code]

    font-size:20px;color:red;background-color:white;
    
[/code]

と言うような書き方をしています


CC BY-SA 4.0
2021-03-09T11:20:42.313
74550
2023-02-03T06:59:49.677
2021-03-09T12:19:10.230
3060
15047
question
css qt font qt-creator
Qt(C++)Grid Layout上のQLabelでフォントの余白によってLabelが大きくなってしまう(Labelのデザインはstylesheetを使用)


コードがないので何とも言えませんが、お勧めはQFontMetricsかQFontMetricsFを利用することです。お使いのフォントを元にテキストのサイズを測ってくれるクラスです。  
中国語、韓国語、日本語は文字自体が違います。それもサイズに影響することはあるでしょう。しかし、最もサイズの違いを生んでいるのはそれぞれのフォントによるものだと考えます。もし別々のフォントを利用してでも同じサイズを保ちたいとお考えであれば、その際には、３つのサイズが全て共通のサイズになるようにするべきです。  
Labelで描いているということなので、QLabelを利用されているのだろうと思います。このQLabelをQGridLayoutに配置されていらっしゃるのですね。  
全体のウィジェットに合わせて、QGridLayoutはQLabelの大きさを変化させるのですが、そもそもの大きさはQLabelの中のsizeHintとminimumSizeHintの大きさで決定しています。  
sizeHintがデフォルトの大きさです。フォントの大きさは、フォント次第で決定してしまいますから、例えば韓国語のフォントが一番大きいサイズを返した時、日本語と中国語のラベルのサイズも、そのサイズに合わせるようにコードを作るのがいいと思います。  
フォントは万能ではなく、時に文字が小さくなりすぎたり、大きくなりすぎたり、無駄に余白が空きすぎたりするものもあるようです。例えば、カンボジア語クメール文字は、標準フォントが小さすぎるという批判が出ています。

> 2012年5月現在、いまだにクメール文字の表示・入力環境が十分に整備されているとは言い難い状況にある。マイクロソフトは、Windows
> Vista/7から「Daun
> Penh」というクメール文字フォントを同梱しているが[5]、このフォントではクメール文字が他の文字と比べて極端に小さく表示されるという不具合が生じている。  
>
> <https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A1%E3%83%BC%E3%83%AB%E6%96%87%E5%AD%97>

* * *

このように、文字の形というよりは、フォントによって文字のサイズはかなり影響を受けます。（フォントのポイントサイズはあまり関係がないようです。）ラベルのサイズは、最大のサイズを返すラベルの大きさに統一すれば問題がないのですが、文字のサイズの違いを出したくないというのであれば、monospace（等幅フォント）の使用を検討するしかないと思います。  


CC BY-SA 4.0
2023-02-03T06:59:49.677
93694
2023-02-03T06:59:49.677
56922
74550
answer