Qt 窗口居中显示 | 您所在的位置:网站首页 › qt弹窗居中 › Qt 窗口居中显示 |
Qt 窗口居中显示
引言一、窗体的setGeometry函数二、计算屏幕中心然后move三、借助QRect计算四、补充知识点
引言
窗口居中可以提供良好的视觉效果、突出重点内容、提升用户导航和操作的便利性,有助于改善用户体验。 Qt一般情况下,其Mainwindow或弹出的窗口默认就是居中的,但是也有特殊情况:这就需要将窗口移动到屏幕中心. 以下介绍几种常用的居中方式(大同小异): 一、窗体的setGeometry函数setGeometry()可以调整窗口的QRect (位置和大小),调用QStyle::alignedRect可直接返回计算好的窗体相对屏幕居中的QRect,例程如下: 需要注意不要在resizeEvent() or moveEvent()调用setGeometry()函数,会导致无线循环 #include "mainwindow.h" #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; w.setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, w.size(), QGuiApplication::primaryScreen()->geometry())); w.show(); return a.exec(); } 二、计算屏幕中心然后move先获取屏幕的大小以及窗体的大小,然后手动计算窗口居中位置,使用move移动. 例程如下: 可参考 QT设置弹窗显示屏幕中央:https://blog.csdn.net/weixin_40921238/article/details/133378912 #include "mainwindow.h" #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; // 获取屏幕的几何信息 QRect screenRect = QGuiApplication::primaryScreen()->geometry(); // 计算弹窗的中心位置 int x = (screenRect.width() - w.width()) / 2; int y = (screenRect.height() - w.height()) / 2; // 设置弹窗的位置 w.move(x, y); w.show(); return a.exec(); } 三、借助QRect计算借助QRect计算窗体和屏幕中心的位置偏移,然后进行移动. 可参考 Qt窗口的居中显示:https://www.bilibili.com/read/cv26794535/?jump_opus=1 Qt窗口屏幕居中显示:https://www.cnblogs.com/qq78292959/archive/2012/08/25/2655963.html #include "mainwindow.h" #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; // 获取屏幕的几何信息 QRect screenRect = QGuiApplication::primaryScreen()->geometry(); // 计算居中位置 int x = (screenRect.width() - w.width()) / 2; int y = (screenRect.height() - w.height()) / 2; QPoint centerPoint = screenRect.center() - w.geometry().center(); // 设置弹窗的位置 w.move(w.pos() + centerPoint); w.show(); return a.exec(); } 四、补充知识点 关于show和move,可以先move然后再show窗口就不会闪烁. Qt推荐使用 QGuiApplication替代QApplication::desktop() 一般用QGuiApplication::primaryScreen()足以 QGuiApplication::screens()可以获取所有屏幕. 遍历代码如下: QList screens = QGuiApplication::screens(); foreach (QScreen *screen, screens) { qDebug() |
CopyRight 2018-2019 实验室设备网 版权所有 |