Qt 窗口居中显示

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.mzph.cn/web/23762.shtml

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

相关文章

咖啡机器人如何精准控制液位流量

在如今快节奏的生活中&#xff0c;精确控制液位流量的需求愈发迫切&#xff0c;特别是在咖啡机器人等精密设备中。为了满足这一需求&#xff0c;工程师们不断研发出各种先进的技术&#xff0c;以确保液体流量的精准控制。其中&#xff0c;霍尔式流量计和光电式流量计就是两种常…

【Spring Cloud】Gateway 服务网关核心架构的执行流程和断言

文章目录 基本概念执行流程断言内置路由断言工厂自定义路由断言工厂 总结 基本概念 路由(Route)是gateway中最基本的组件之一&#xff0c;表示一个具体的路由信息载体。主要定义了下面的几个信息&#xff1a; id&#xff1a;路由标识符&#xff0c;区别于其他Route。uri&…

论文合集整理推荐2024.6.4

论文合集整理推荐2024.6.4 原创 小王搬运工 时序课堂 2024-06-04 20:12 四川 ‍2012年论文合集&#xff1a;论文入口 ‍2019年论文合集&#xff1a;论文入口 2021年论文合集&#xff1a;论文入口 2022年论文合集&#xff1a;论文入口 2023年论文合集&#xff1a;论文入口…

carbondata入库数据查询异常排查

1&#xff0c;背景&#xff1a;carbondata的入库segments对应的状态都是success&#xff0c;但是查询的时候报错&#xff0c; 2&#xff0c;排查内容 1&#xff0c;segments的状态 success 2&#xff0c;任务执行记录日志 正常 3&#xff0c;找到对应查询的天&#xff0c;指定对…

【JavaEE精炼宝库】多线程(4)深度理解死锁、内存可见性、volatile关键字、wait、notify

目录 一、死锁 1.1 出现死锁的常见场景&#xff1a; 1.2 产生死锁的后果&#xff1a; 1.3 如何避免死锁&#xff1a; 二、内存可见性 2.1 由内存可见性产生的经典案例&#xff1a; 2.2 volatile 关键字&#xff1a; 2.2.1 volatile 用法&#xff1a; 2.2.2 volatile 不…

使用 Scapy 库编写 ICMP 时间戳攻击脚本

一、介绍 ICMP时间戳攻击&#xff08;ICMP Timestamp Attack&#xff09;是一种利用ICMP协议中的Timestamp请求和响应消息来实施的攻击。攻击者发送大量的ICMP Timestamp请求消息到目标主机&#xff0c;以触发目标主机对每个请求进行响应&#xff0c;从而消耗目标系统的网络资…

【Linux】(一)——Linux基础和Linux命令基础语法

目录 Linux基础Linux发行版本Linux终端Linux命令 Linux基础 Linux&#xff0c;通常指的是GNU/Linux操作系统&#xff0c;这是一个开源且免费使用的类UNIX操作系统。它的核心组件——Linux内核&#xff0c;由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在1991年10月5日…

Arthas使用教程——JVM常用命令

JVM相关命令 dashboard——当前系统的实时数据面板 显示当前 tomcat 的实时信息。 使用方式&#xff1a;dashboard 数据说明 ID: Java 级别的线程 ID&#xff0c;注意这个 ID 不能跟 jstack 中的 nativeID 一一对应。 NAME: 线程名 GROUP: 线程组名 PRIORITY: 线程优先级…

Rocky Linux安装与基础配置

目录 背景与起源 主要特点 目标用户 发展前景 下载 安装 常用配置命令&#xff1a; 更换镜像源 Rocky Linux 是一个开源的、由社区驱动的操作系统&#xff0c;旨在使用 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源码构建的下游二进制兼容发行版。以下是关于…

优思学院|一文看懂新版FMEA与FMEA的七大步骤

FMEA的起源 FMEA最早起源于20世纪40年代的美国军工行业。当时&#xff0c;美国军方为了提高武器系统的可靠性和安全性&#xff0c;开始使用FMEA来识别和评估潜在的故障模式及其影响。1949年&#xff0c;美国军方发布了《军用程序手册》&#xff08;Military Procedures Handbo…

【Python报错】已解决AttributeError: ‘method‘ object has no attribute ‘xxx‘

解决Python报错&#xff1a;AttributeError: ‘method’ object has no attribute ‘xxx’ 在Python中&#xff0c;AttributeError通常表明你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: method object has no attribute xxx的错误&#xff0c;这通常意…

奇迹MU最强法师介绍

1、黑龙波 释放出深渊中的黑龙之魂&#xff0c;对一定范围内的目标造成中等程度伤害。 奥义&#xff1a; 怒哮——法师释放出深渊龙魂的怨怒之力&#xff0c;在电闪雷鸣中中咆哮的龙魂将对敌人额外造成少量伤害。 魂阵——法师利用法阵控制黑龙之魂进行更大范围的攻击&…

如何使用SeaFile文件共享服务器结合内网穿透将家中电脑变成个人云盘

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 本文主要为大家介绍&#xff0c;如何使用两个…

【Oracle篇】rman全库异机恢复:从RAC环境到单机测试环境的转移(第四篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

【Linux】Linux工具——make/Makefile

1.背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的 规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需…

Edge 工作区是什么?它都有哪些作用?

什么是工作区 Edge 工作区是什么&#xff1f;它是微软 Edge 浏览器中的一个功能&#xff0c;在帮助用户更好地组织和管理他们的浏览会话。通过工作区&#xff0c;用户可以创建多个独立的浏览环境&#xff0c;每个工作区内包含一组相关的标签页和浏览器设置。这使得用户能够根据…

SQL进阶day9————聚合与分组

目录 1聚合函数 1.1SQL类别高难度试卷得分的截断平均值 1.2统计作答次数 1.3 得分不小于平均分的最低分 2 分组查询 2.1平均活跃天数和月活人数 2.2 月总刷题数和日均刷题数 2.3未完成试卷数大于1的有效用户 1聚合函数 1.1SQL类别高难度试卷得分的截断平均值 我的错误…

开放式耳机十大品牌推荐!怎么选耳机看这六招!

随着耳机厂家的疯狂内卷&#xff0c;以前让学生党望其项背的千元耳机技术&#xff0c;纷纷被厂家下沉至百元耳机&#xff0c;是以2024年始&#xff0c;百元开放式耳机以新物种、价低格而爆火。看到身边朋友争相购买开放式耳机&#xff0c;既当耳饰&#xff0c;又当耳机&#xf…

分享:2024年(第12届)“泰迪杯”数据挖掘挑战赛成绩公示

2024年&#xff08;第12届&#xff09;“泰迪杯”数据挖掘挑战赛历时两个月顺利结束。竞赛采用盲审&#xff08;屏蔽参赛者信息&#xff1b;评审专家只能评阅非本区域作品&#xff1b;三位评阅专家同时评阅同一作品&#xff0c;超限调整后再取平均分&#xff09;&#xff0c;答…

FC-135是一款受欢迎的32.768kHz晶振

KHZ中爱普生是以32.768KHZ最为出名的。32.768K晶振是一款数字电路板都要使用到的重要部件&#xff0c;有人比喻为电路板的冰发生器&#xff0c;也就是说心如果停止了跳动&#xff0c;那么电路板也将无法进行稳定的工作了&#xff0c;爱普生晶振FC-135是一款受欢迎的32.768KHz晶…