Qt 窗口居中显示

news2024/11/25 6:48:35

Qt 窗口居中显示

  • 引言
  • 一、窗体的setGeometry函数
  • 二、计算屏幕中心然后move
  • 三、借助QRect计算
  • 四、补充知识点

引言

窗口居中可以提供良好的视觉效果、突出重点内容、提升用户导航和操作的便利性,有助于改善用户体验。

  • Qt一般情况下,其Mainwindow或弹出的窗口默认就是居中的,但是也有特殊情况:这就需要将窗口移动到屏幕中心. 以下介绍几种常用的居中方式(大同小异):

一、窗体的setGeometry函数

setGeometry()可以调整窗口的QRect (位置和大小),调用QStyle::alignedRect可直接返回计算好的窗体相对屏幕居中的QRect,例程如下:

需要注意不要在resizeEvent() or moveEvent()调用setGeometry()函数,会导致无线循环

#include "mainwindow.h"
#include <QApplication>
#include <QStyle>
#include <QScreen>

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 <QApplication>
#include <QStyle>
#include <QScreen>

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 <QApplication>
#include <QStyle>
#include <QScreen>

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();
}

四、补充知识点

    1. 关于showmove,可以先move然后再show窗口就不会闪烁.
    1. Qt推荐使用 QGuiApplication替代QApplication::desktop() 一般用QGuiApplication::primaryScreen()足以
      QGuiApplication::screens()可以获取所有屏幕. 遍历代码如下:
QList<QScreen *> screens = QGuiApplication::screens();
foreach (QScreen *screen, screens) {
    qDebug() << "Screen geometry: " << screen->geometry();
    qDebug() << "Screen available geometry: " << screen->availableGeometry();
    qDebug() << "Screen logical DPI: " << screen->logicalDotsPerInch();
    qDebug() << "Screen physical DPI: " << screen->physicalDotsPerInch();
    qDebug() << "Screen scale factor: " << screen->devicePixelRatio();
}
    1. QRect简述
      QRect类使用整数精度定义平面中的矩形,通常表示为左上角(top() and left())和大小(width() and height())。
      在这里插入图片描述

由于历史原因,bottom()和right()函数返回的值偏离了矩形的真正右下角:right返回left+width-1,bottome返回top+height-1。bottomRight函数返回的点也是如此。
建议使用x+width和y+height来找到真正的右下角,并避免使用right和bottom。另一种解决方案是使用QRectF:QRectF类使用坐标的浮点精度定义平面中的矩形,并且QRectF::right和QRectF::bottom函数确实返回右坐标和底坐标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1797478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习笔记——IP地址网络协议——CIDR无类别域间路由

五、CIDR无类别域间路由 1、CIDR的介绍 无类域间路由(Classless Inter Domain Routing&#xff0c;CIDR)也称为&#xff1a;超网(supernetting)由RFC1817定义。CIDR突破了传统IP地址的分类边界&#xff0c;将路由表中的若干条路由汇聚为一条路由&#xff0c;减少了路由表的规…

河南市政环境卫生乙级资质:人员准备要点

河南市政环境卫生乙级资质申请在人员准备方面&#xff0c;需要满足一系列的要求和标准。以下是人员准备的要点&#xff0c;按照清晰、分点的方式进行归纳&#xff1a; 一、注册类工程师 注册二级建筑师&#xff1a;至少1名&#xff0c;负责市政环境卫生工程中的建筑设计及相关…

Vue3【七】setup的语法糖setup简写方法

Vue3【七】setup的语法糖setup简写方法 Vue3【七】setup的语法糖setup简写方法 使用script标签式写法称为setup语法糖 组件名称默认位文件名 export 的内容可以省略 案例截图 案例目录 案例代码 Person.vue <template><div class"person"><h1>我…

美颜SDK与直播美颜插件:开发者指南与优化技巧

本篇文章&#xff0c;小编将详细探讨如何利用美颜SDK和直播美颜插件进行开发&#xff0c;以及在实际应用中优化这些工具的技巧。 一、美颜SDK简介 美颜SDK这些功能通过复杂的图像处理算法实现&#xff0c;SDK的存在大大简化了开发者的工作&#xff0c;使他们无需从零开始编写…

酷我音乐 v10.8.2.1 解索SVIP版,畅享无界音乐盛宴!

酷我音乐 v10.8.2.1 解索SVIP版 酷我音乐&#xff0c;一款多功能音乐软件&#xff0c;集成了音乐播放、歌曲下载、歌词同步、在线电台等多项服务。该应用致力于提供高品质的音乐欣赏体验和独特的音乐探索机会&#xff0c;无论用户身处何地。此外&#xff0c;它还支持大量付费高…

STM32项目分享:智能家居安防系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

倩女幽魂游戏攻略:24小时辅助云手机选哪家好?

在《倩女幽魂》中&#xff0c;玩家经常需要长时间挂机以完成任务和提升等级。选择合适的云手机软件可以大大提升游戏效率。以下是选择VMOS云手机作为挂机软件的几个理由&#xff1a; 多开应用支持 VMOS云手机允许用户在虚拟环境中同时运行多个应用程序&#xff0c;这包括多个…

MyBatis总结(2)- MyBatis实现原理(一)

Mybatis实现原理&#xff1a; 概括一句话&#xff1a;约定配置参数mybatis-config.xml&#xff0c;映射关系JavaBean-mapper.xml&#xff0c;用SqlSessionFactoryBuilder构建应用程序运行期间需要的SqlSessionFactory实例对象&#xff0c;当请求或方法需要执行CURD操作时&…

3DGS语义分割之LangSplat

LangSplat是CVPR2024的paper. 实现3DGS的语义分割&#xff08;可文本检索语义&#xff09; github: https://github.com/minghanqin/LangSplat?tabreadme-ov-file 主要思想是在3DGS中加入了CLIP的降维语义特征&#xff0c;可用文本检索目标&#xff0c;实现分割。 配置环境&…

[office] Excel数据透视表有什么用途?Excel数据透视表怎么做? #学习方法#职场发展

Excel数据透视表有什么用途&#xff1f;Excel数据透视表怎么做&#xff1f; Excel数据透视表是一种数据汇总手段&#xff0c;如果表格内的数据太多&#xff0c;单靠肉眼是很难准确分辨数据的&#xff0c;而使用数据透视表&#xff0c;就可以很方便的筛选各种数据。如果你不知道…

什么是广告联盟变现

广告联盟变现&#xff0c;作为一种连接广告主与各类媒体平台的机制&#xff0c;正展现出强大的生命力和影响力。它为拥有流量资源的一方提供了将其转化为实际经济收益的有效途径。通过广告联盟&#xff0c;媒体平台可以与众多广告主建立合作关系&#xff0c;获取多样化的广告内…

基于STM32开发的智能停车场管理系统

目录 引言环境准备智能停车场管理系统基础代码实现&#xff1a;实现智能停车场管理系统 4.1 车辆检测传感器数据读取4.2 车位状态管理4.3 实时数据监控与分析4.4 用户界面与数据可视化应用场景&#xff1a;停车场管理与优化问题解决方案与优化收尾与总结 1. 引言 随着城市化…

AI日报|文生语音大模型国内外均有突破,Pika完成6亿新融资,视频大模型也不远了!

文章推荐 AI搜索哪家强&#xff1f;16款产品实战测评&#xff0c;效率飙升秘籍&#xff01; AI日报&#xff5c;智谱AI再降价&#xff0c;同时开源9B系列模型&#xff1b;国内外气象大模型竞逐升级 字节推出文本到语音模型家族Seed-TTS&#xff1a;擅长情感表达&#xff0c;…

视觉SLAM十四讲:从理论到实践(Chapter12:建图)

前言 学习笔记&#xff0c;仅供学习&#xff0c;不做商用&#xff0c;如有侵权&#xff0c;联系我删除即可 一、主要目标 1. 理解单目SLAM中稠密深度估计的原理。 2. 通过实验了解单目稠密重建的过程。 3. 了解几种RGB-D重建中的地图形式。 构建的地图也有多种功能分类&…

python的继承

本章正式开始之前&#xff0c;先让我们回顾一下什么是 对象 &#xff1f; 什么是 类 &#xff1f; 小贝 喜欢 猫咪&#xff0c;今年领养了一只名叫 Kitty 的 布偶猫。则下列哪项是 对象 呢&#xff1f;  A. 猫咪 B. Kitty C. 布偶猫 相比之下&#xff0c;闻闻 更喜欢 犬科 动…

鸿蒙全栈开发-基于ARKTS开发之初识框架-app.json5

前言 随着鸿蒙的不断发展,华为自行研制的“鸿蒙系统”横空出世&#xff0c;华为用实力为自己开辟了一个全新的时代&#xff0c;让中国品牌走向世界,并为程序员们带来了新的职业机遇。 这里来跟大家简单的聊一下鸿蒙基于ARKTS开发之初识框架-app.json5 当我们新建一个工程或者…

PICRUSt2在微生物功能预测分析中的应用解读

谷禾健康 微生物组学研究现已超越微生物群落组成分析得到更广泛的使用。大量的人类微生物组研究证据表明&#xff0c;肠道微生物组的功能变化对炎症和免疫反应的影响起到关键的影响作用。 16S rRNA分析是微生物组研究作为最常用便捷且具有成本效益的测量技术&#xff0c;用于分…

Hadoop3:MapReduce工作流程图解

一、流程图 二、流程说明 上面的流程是整个MapReduce最全工作流程&#xff0c;但是Shuffle过程只是从第7步开始到第16步结束&#xff0c;具体Shuffle过程详解&#xff0c;如下&#xff1a; &#xff08;1&#xff09;MapTask收集我们的map()方法输出的kv对&#xff0c;放到内存…

笔记95:车辆横向动力学方程转化为误差形式 -- 详细推导过程

1. 非误差型车辆横向动力学方程 注&#xff1a;关于轮胎侧偏刚度的正负 深蓝课程推导得到的车辆横向动力学返程使用的轮胎侧偏刚度是默认为正数&#xff1b;老王课程推导得到的车辆横向动力学方程使用的轮胎侧偏刚度是默认为负数&#xff1b; 1.1 深蓝课程推导得到的方程&…

工厂生产计划难以执行的真正原因及对策

在制造业中&#xff0c;生产计划的执行对于企业的运营至关重要。然而&#xff0c;许多工厂在生产计划执行过程中面临着诸多挑战&#xff0c;尤其是物料齐套率低的问题。本文将探讨工厂生产计划难以执行的真正原因&#xff0c;并提出相应的解决对策。 一、生产计划难以执行的真…