Qt С++ Отобразить новое окно по центру старого окна

У меня есть QWidget с кнопкой. При нажатии кнопки показывается новое окно меньшего размера (также Qwidget). Я хочу, чтобы новое окно было центрировано по горизонтали и вертикали в главном окне. Код, который отображает новое окно:

QWidget *wdg = new QWidget;
QPushButton *closeBtn = new QPushButton("Close");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(closeBtn);
wdg->setLayout(layout);
wdg->show();
wdg->resize(400,200);

person Ondřej Ryška    schedule 24.06.2014    source источник
comment
Примечание к стилю: вы можете заменить new QHBoxLayout; [...] wdg->setLayout на new QHBoxLayout(wdg). Тогда setLayout не нужен.   -  person Kuba hasn't forgotten Monica    schedule 25.06.2014


Ответы (1)


Используйте слот move. Например:

QPoint centerPoint = oldWidget->geometry()->center();

newWidget->adjustSize();
newWidget->move(centerPoint.x() - newWidget->width()/2, centerPoint.y() - newWidget->height()/2);

Вы можете использовать frameGeometry() вместо geometry().

http://qt-project.org/doc/qt-5/application-windows.html#window-geometry

Надеюсь, это поможет.

person phyatt    schedule 24.06.2014