QWidget (または QDialog) を親ウィジェットの中央に配置したいと考えています。親ウィジェットのシグナルに接続することは本当に必要ですか、それとももっと簡単な方法 (設定するもの) がありますか?
2 に答える
私はそれを自分で解決し、誰かが役立つかどうか自分の質問に答えるだけです.
中央に置いてください:
void MyMainWindow::moveEvent(QMoveEvent* event)
{
const QPoint global = this->mapToGlobal(rect().center());
waitDialog->move(global.x() - waitDialog->width() / 2, global.y() - waitDialog->height() / 2);
}
waitDialog
...私の「待機...」インジケーターのインスタンスはどこにありますか。moveEvent
これは、親のメソッドをオーバーライドする必要があります(ここではMyMainWindow
)。
QWidget がその親の同じウィンドウ内の子である場合、適切な設定で親の QLayout (QBoxLayout または QGridLayout など) に追加して、レイアウトを中央に配置することができます。
それが QDialog (または独自の個別に移動可能なトップレベル ウィンドウに設定されているその他の QWidget) の場合、QLayout アプローチは機能しません。代わりにできることは、親ウィジェットの resizeEvent() メソッドをオーバーライドして子ダイアログで setGeometry() を呼び出し、親のサイズが変更されるたびに子ダイアログの位置やサイズが更新されるようにすることです。親ウィンドウの moveEvent() メソッドをオーバーライドして、ユーザーが親ウィンドウを移動したことを検出し、その移動に合わせてダイアログの位置を移動できるようにする必要がある場合もあります。通常、ユーザーは親ウィンドウとは独立して画面上でダイアログを移動できることを期待しているため、これが本当に必要な動作であるかどうかは 100% 確信が持てません。