3

Qtプロジェクトに取り組んでいますが、いくつかのGUIフォームに永続的な問題があることに気づきました。フォームはKDE(下の画像)とWindowsで問題なく表示されますが、アプリがGNOME3ベース(UnityやGNOME3自体など)で実行されると、フォームの一部が非表示になります。(上の画像、[昇順で並べ替え]ラジオボタンの下のすべてが切り取られています)

問題は、Qtレイアウトが大きなフォントサイズを処理する方法にあるようです。ユーザーが通常サイズのシステムフォント(<= 10pt)を使用している場合、すべてが正常に機能します。より大きなフォントを使用している場合、フォームはすべてを収容するのに十分な大きさではありません。このバグの影響を受ける他のフォームは単に混雑していますが、それは範囲外の重要なコントロールを持つほど深刻ではありません。ダイアログを拡大した場合、レイアウトは新しいスペースを利用するためにサイズを変更したくありません。これを行う簡単な方法はありますか、それともハードコーディングする必要がありますか?元々、コードは実行時のダイアログのサイズ変更を妨げていましたが、その機能を復元してもバグは修正されませんでした。ダイアログが拡張できる場合でも、問題はレイアウトがそれとともに拡張されないことです。

これまで、このバグを補うために影響を受けるすべてのフォームを特大にしましたが、フォントが適切なサイズであるWindowsおよびKDEシステムで必要なダイアログよりもはるかに大きいダイアログがあるのは奇妙に見えます。影響を受けるダイアログ/レイアウトのサイズを変更して、実行時にすべてが適切に収まるようにする方法はありますか?もしそうなら、GUIの一部が範囲外の場合、プログラムはどのようにそれを検出しますか?特定のフォントサイズを強制したくない(視力の問題のために大きなフォントを好む人もいる)。

助けてくれてありがとう。

オプションの一部が切り捨てられます(昇順で並べ替えのすぐ下)

これはそれがどのように見えるべきかです

4

1 に答える 1

3

これを修正するには、フォームを表示するときに別のアプローチを使用します。私が説明するように、より動的な方法です。私は、96 および非常に高い DPI モード (120 以上) の Windows でこのアプローチをうまく使用しました。

1. OS にクエリを実行し、特定のシステム アイテムに対してユーザーが選択したフォントを取得します。ウィンドウのキャプションまたはシステム ダイアログ ボックスに使用されるフォントを指定します。また、必要に応じて、ユーザーが後でフォントを選択できるようにすることもできます。これを行う場合は、可能であれば True Type フォントを使用してください。

2. そのフォントを使用して、ラベルまたは編集コントロールに使用する文字列オブジェクトを作成し (これが QT の場合はわかりません。Windows の場合は GetTextExtentPoint32 です)、システム関数に渡して幅を決定します。環境に合わせた文字列の高さ。

3. 上記の値を指定して、コントロールを配置し、必要に応じてコントロールの周囲にパディングを使用してフォームのサイズを動的に変更します。ボタンの場合は、好みに応じて、ボタンの上下に特定の割合のピクセルを常に追加することができます。

4. ビットマップや jpeg などのグラフィック要素の場合は、OS にモニターの現在の DPI 設定を再度照会し、事前に作成されたより大きなリソースを使用します。当然のことながら、これらの要素の周りのすべてのテキストは、その場で動的に配置されます。

Windows では、マニフェストを使用して exe を高 dpi 対応としてマークする必要があることに注意してください。

于 2012-08-23T02:57:52.700 に答える