Qt 窗口居中显示 您所在的位置:网站首页 qt弹窗居中 Qt 窗口居中显示

Qt 窗口居中显示

2024-07-01 18:40| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有