有时候使用show()函数并不会让窗口显示在桌面中间,或者由于windows状态栏的影响,窗口偏下,需要减去状态栏的高度,可使用以下方法:
//用于正确获取控件的大小,一定要在show()之后,frameGeometry()才能正确获取
setAttribute(Qt::WA_DontShowOnScreen);
dlg.show();
dlg.hide();
setAttribute(Qt::WA_DontShowOnScreen, false);
//获取windows工作区域(不包括状态栏)
QRect rtWorkArea;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rtWorkArea, 0);
dlg.move((rtWorkArea.width() - dlg.frameGeometry().width()) / 2, (rtWorkArea.height() - dlg.frameGeometry().height()) / 2);
dlg.show();