Центрирование главного окна

Linux, Qt 6.6 Необходимо отцентрировать главное окно приложения.

Использую следующий код в main:

QApplication a(argc, argv);
DPSMainWindow w;
// w.size.width = 800 w.size.height = 600

QPoint center = QGuiApplication::primaryScreen()->geometry().center();
//Center.x = 959 Center.y = 539
int x = center.x() - (w.width()/2);                                     
int y = center.y() - (w.height()/2);                                    

center.setX(x);
center.setY(y);
// Center.x = 559 Center.y = 239
    
w.show();
w.move(center);

return a.exec();

окно не центрируется.

В чем могут быть проблемы?


Ответы (1 шт):

Автор решения: needKVAS

Вы не учитываете рамку окна и не учитываете уменьшенную рабочую область экрана.

//Геометрия с учётом панели задач
QPoint center = QGuiApplication::primaryScreen()->availableGeometry().center(); 

w.show();

//Геометрия с учётом рамки окна
QRect frame = w.frameGeometry(); 
int x = center.x() - (frame.width()/2);
int y = center.y() - (frame.height()/2);

center.setX(x);
center.setY(y);

w.move(center);

Здесь show() вызван до расчёта местоположения т.к. до вызова данного метода рамки окна не существует.

→ Ссылка