7

メインフォームのコンストラクターでこれらを試しました。

QRect desktopRect = QApplication::desktop()->availableGeometry(this);
move(desktopRect.center() - frameGeometry().center());

QRect desktopRect = QApplication::desktop()->availableGeometry(this);
move(desktopRect.center() - rect().center());

ただし、どちらもフォームを中央に配置するのではなく、フォームの右下隅を画面のほぼ中央に配置します。何か案は?

4

7 に答える 7

13

メインフォームのコンストラクターでこれらを試しました

それがおそらく問題です。オブジェクトが表示されていないため、この時点では有効なジオメトリ情報がない可能性があります。

オブジェクトが最初に構築されるとき、それは基本的に(0,0)it's expected(width,height)に配置されます。

frame geometry at construction:  QRect(0,0 639x479) 

しかし、表示された後:

frame geometry rect:  QRect(476,337 968x507) 

したがって、まだあなたのframeGeometry()情報に頼ることはできません。

編集:そうは言っても、必要に応じて簡単に移動できると思いますが、完全を期すために、フレームのジオメトリ情報に依存しないパトリスのコードをドロップしています:

QRect desktopRect = QApplication::desktop()->availableGeometry(this);
QPoint center = desktopRect.center();

move(center.x() - width() * 0.5, center.y() - height() * 0.5);
于 2010-08-06T15:28:45.217 に答える
4

移動関数(QWidgetのドキュメントを参照)は、パラメーターとして1つのQPointまたは2つのintを取ります。これは、ウィジェットの左上隅の座標に対応します(親を基準にしています。ここではOSデスクトップです)。試す:

QRect desktopRect = QApplication::desktop()->availableGeometry(this);
QPoint center = desktopRect.center();

move(center.x()-width*0.5, center.y()-height*0.5);
于 2010-08-06T15:25:26.300 に答える
-1

問題のウィンドウが800×800であると仮定すると、別の解決策:

QRect rec = QApplication::desktop()->availableGeometry();
move(QPoint((rec.width()-800)/2, (rec.height()-800)/2));
于 2016-09-19T21:25:36.523 に答える