Qt20窗口相关位置函数

news2024/9/22 4:37:31

窗口相关位置函数

  • 知识点
  • geometry.h
  • geometry.cpp
  • main.cpp
  • 运行图

知识点

geometry().x() 多屏幕实现方法

#include <QWidget>  
#include <QPoint>  
#include <QScreen>  
  
// 假设这个函数是某个QWidget的子类中的成员函数  
void MyWidget::showGlobalXPosition() {  
    // 获取窗口部件的左上角位置(相对于其父窗口)  
    QPoint localPos = this->pos();  
  
    // 将局部位置转换为全局屏幕位置  
    QPoint globalPos = this->mapToGlobal(localPos);  
  
    // 现在globalPos.x()就是窗口部件的全局x坐标  
    int globalX = globalPos.x();  
  
    // 输出或使用globalX  
    qDebug() << "Global X position:" << globalX;  
  
    // 如果你还想知道这个坐标属于哪个屏幕,可以这样做:  
    QScreen *screen = QGuiApplication::screens().at(0); // 默认取第一个屏幕,但通常你会想找到实际的屏幕  
    for (QScreen *scr : QGuiApplication::screens()) {  
        if (scr->geometry().contains(globalPos)) {  
            screen = scr;  
            break;  
        }  
    }  
  
    // 现在screen变量指向了包含窗口部件的屏幕  
    qDebug() << "The widget is on screen:" << screen->name(); // 假设屏幕有名字  
}

geometry.h

#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <QWidget>
#include <QDialog>
#include <QLabel>
#include <QGridLayout>
#include <QMoveEvent>
#include <QResizeEvent>

class geometry : public QDialog
{
    Q_OBJECT

public:
    geometry(QWidget *parent = nullptr);
    ~geometry();
    void UpdateLabel();
private:
    QLabel* xLabel;
    QLabel* xValueLabel;
    QLabel* yLabel;
    QLabel* yValueLabel;
    QLabel* FrmLabel;
    QLabel* FrmValueLabel;
    QLabel* PosLabel;
    QLabel* PosValueLabel;
    QLabel* GeoLabel;
    QLabel* GeoValueLabel;
    QLabel* WidthLabel;
    QLabel* WidthValueLabel;
    QLabel* HeightValueLabel;
    QLabel* HeightLabel;
    QLabel* RectLabel;
    QLabel* RectValueLabel;
    QLabel* SizeLabel;
    QLabel* SizeValueLabel;
    QGridLayout* MainLayout;
protected:
    void moveEvent(QMoveEvent*);
    void resizeEvent(QResizeEvent*);


};
#endif // GEOMETRY_H

geometry.cpp

#include "geometry.h"

geometry::geometry(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("Geometry"));
    xLabel = new QLabel(tr("x():"));
    xValueLabel = new QLabel;
    yLabel = new QLabel(tr("y():"));
    yValueLabel = new QLabel;
    FrmLabel = new QLabel(tr("Frame:"));
    FrmValueLabel = new QLabel;
    PosLabel =new QLabel(tr("pos():"));
    PosValueLabel =new QLabel;
    WidthLabel = new QLabel("Width():");
    WidthValueLabel = new QLabel;
    HeightLabel = new QLabel(tr("Height():"));
    HeightValueLabel = new QLabel;
    RectLabel = new QLabel(tr("rect():"));
    RectValueLabel = new QLabel;
    SizeLabel = new QLabel(tr("Size():"));
    SizeValueLabel =new QLabel;
    GeoLabel = new QLabel(tr("Geometry():"));
    GeoValueLabel = new QLabel;
    MainLayout = new QGridLayout(this);
    MainLayout->addWidget(xLabel,0,0);
    MainLayout->addWidget(xValueLabel,0,1);
    MainLayout->addWidget(yLabel,1,0);
    MainLayout->addWidget(yValueLabel,1,1);
    MainLayout->addWidget(FrmLabel,2,0);
    MainLayout->addWidget(FrmValueLabel,2,1);
    MainLayout->addWidget(PosLabel,3,0);
    MainLayout->addWidget(PosValueLabel,3,1);
    MainLayout->addWidget(WidthLabel,4,0);
    MainLayout->addWidget(WidthValueLabel,4,1);
    MainLayout->addWidget(HeightLabel,5,0);
    MainLayout->addWidget(HeightValueLabel,5,1);
    MainLayout->addWidget(RectLabel,6,0);
    MainLayout->addWidget(RectValueLabel,6,1);
    MainLayout->addWidget(SizeLabel,7,0);
    MainLayout->addWidget(SizeValueLabel,7,1);
    MainLayout->addWidget(GeoLabel,8,0);
    MainLayout->addWidget(GeoValueLabel,8,1);
    UpdateLabel();
}

geometry::~geometry() {}

void geometry::UpdateLabel()
{
    QString xStr,yStr;
    xValueLabel->setText(xStr.setNum(x()));
    yValueLabel->setText(yStr.setNum(y()));

    QString FrameStr;
    QString TmpStr1,TmpStr2,TmpStr3,TmpStr4;
    FrameStr = TmpStr1.setNum(frameGeometry().x()) + ","+TmpStr2.setNum(frameGeometry().y())+","+ TmpStr3.setNum(frameGeometry().width()) + ","+TmpStr4.setNum(frameGeometry().height());
    FrmValueLabel->setText(FrameStr);

    QString PositionStr;
    QString TmpStr11,TmpStr12;
    PositionStr = TmpStr11.setNum(pos().x()) + "," +TmpStr12.setNum(pos().y());
    PosValueLabel->setText(PositionStr);



    QString wStr,hStr;
    WidthValueLabel->setText(wStr.setNum(width()));
    HeightValueLabel->setText(hStr.setNum(height()));

    QString RectStr;
    QString TmpStr31,TmpStr32,TmpStr33,TmpStr34;
    RectStr = TmpStr31.setNum(rect().x()) + "," +TmpStr32.setNum(rect().y())+ "," + TmpStr33.setNum(rect().width()) + ","+TmpStr34.setNum(rect().height());
    RectValueLabel->setText(RectStr);

    QString SizeStr,TmpStr41,TmpStr42;
    SizeStr = TmpStr41.setNum(size().width()) + "," +TmpStr42.setNum(rect().height());
    SizeValueLabel->setText(SizeStr);
    /*
*/

}

void geometry::moveEvent(QMoveEvent *)
{
    UpdateLabel();
}

void geometry::resizeEvent(QResizeEvent *)
{
    UpdateLabel();
}

main.cpp

#include "geometry.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    geometry w;
    w.show();
    return a.exec();
}

运行图

在这里插入图片描述

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

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

相关文章

【生日视频制作】美女车模特举牌AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程美女车模特举牌AE模板改字广软件告生成器素材 怎么如何做的【生日视频制作】美女车模特举牌AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

C# for语句

计数循环使用for语句比while语句可读性高 for (int i 0; i < 10; i) { Console.WriteLine("hello"); } 先执行int i0&#xff1b;语句&#xff0c;且只执行一次 判断循环条件 i<10; 语句的结果是否为true&#xff0c;如果为true&#xff0c;先执行循环体…

【MySQL】mysql索引和事务(面试经典问题)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 mysql索引 代价 查看索引 创建索引 删除索引 索引背后的数据结构 B树 B树 B树与B树的区别 B树的优势 mysql事务 事务 涉及的四个核心特性: 隔离性详细解释 脏读 不可重…

阿里巴巴1688 阿里228滑块 网站分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我…

前端接口请求与后端交互详解 联调后端取不到值 自己的一点记录写的比较随意 会比较乱但都是干货

响应头&#xff1a; cache-control: 缓存控制 联调后端取不到值&#xff1f;&#xff1f; 无论何种形式传递&#xff0c;后端解析表单信息的时候&#xff0c;会考虑Content-Type。 如果是JSON字符串的话&#xff0c;后端解析payload的内容时候要去解析JSON。 如果是key1val…

国科大 矩阵论2023秋季 叶世伟老师 考试试卷

叶老师的考试很难&#xff0c;图源一位胆大的勇者~ 希望能帮助大家&#xff01;

如何使用poutine检测代码库构建管道中的安全缺陷

关于poutine poutine是一款功能强大的缺陷检测工具&#xff0c;该工具基于Go语言开发&#xff0c;可以帮助广大研究人员快速扫描和检测代码存储库构建管道中的错误配置和安全漏洞。 该工具支持解析来自 GitHub Actions 和 Gitlab CI/CD 的 CI 工作流。当获得具有读取级别访问权…

MySQL:简述事务的SQL操作

1、查询数据库的隔离级别 选择数据库,查看当前事务隔离界别。 &#xff08;1&#xff09;读未提交&#xff1a;READ-UNCOMMITTED &#xff08;2&#xff09;读已提交&#xff1a;READ-COMMITTED &#xff08;3&#xff09;可重复读&#xff1a;REPEATABLE-READ &#xff08;4&…

qt报错 error: undefined reference to `vtable for RelayDevice 解决方法

在 Qt 编程中&#xff0c;当出现错误 undefined reference to ‘vtable for RelayDevice’ 时&#xff0c;通常是因为类的虚函数没有实现&#xff0c;或者未正确实现虚析构函数。以下是一些可能的解决方法&#xff1a; 确保实现所有虚函数&#xff1a; 检查 RelayDevice 类中声…

大白话-【2.1】WindowsServer2016配置DHCP

1.DHCP服务功能介绍 2.DHCP服务安装 3.DHCP服务配置 3.VMWare实操 3.1VMWare用的是vmnet8网段DHCP服务 3.2关闭VMWare提供的DHCP服务 扩展&#xff1a;清除DNS缓存命令 ipconfig/flushdns END 提升 给客户机固定IP 1.查询网卡MAC

漏洞披露-金慧-综合管理信息系统-SQL

本文来自无问社区&#xff0c;更多漏洞信息可前往查看http://wwlib.cn/index.php/artread/artid/6607.html 本文仅用于技术研究学习&#xff0c;请遵守相关法律&#xff0c;禁止使用本文所提及的相关技术开展非法攻击行为&#xff0c;由于传播、利用本文所提供的信息而造成任何…

10天速通Tkinter库——Day8:《植物杂交实验室》杂交实验及历史记录界面

本篇博客我将介绍Tkinter实践项目《植物杂交实验室》中的杂交实验、实验结果和历史记录两个页面的制作。 它们作为主窗口的子页面实例&#xff0c;除了继承主窗口的基础设置&#xff08;如图标、标题、尺寸等等&#xff09;、还可以使用主窗口的属性和方法&#xff08;如数据变…

IoTDB 如何有效实现磁盘 I/O 监控和优化?

IoTDB 监控工具&#xff1a;有效保障读写数据量与系统效率&#xff01; 磁盘 I/O 负载过高的原因是什么&#xff1f;如何排查&#xff1f; 如何判断磁盘 I/O 是否成为系统瓶颈&#xff1f; 如何优化磁盘 I/O 读写性能&#xff1f; 在现代计算机系统和应用程序中&#xff0c;磁盘…

[000-002-01].第26节:MySQL对隔离级别的实现

1.MySQL支持的四种隔离级别&#xff1a; 2.如何设置事务的隔离级别 3.不同隔离级别举例 3.1.演示1. 读未提交之脏读 3.2.演示2&#xff1a;读已提交 3.3.演示3&#xff1a;设置隔离级别为可重复读&#xff0c;事务的执行流程如下&#xff1a; 3.4.演示4&#xff1a;幻读:

3 Python开发工具:VSCode+插件

本文是 Python 系列教程第 3 篇&#xff0c;完整系列请查看 Python 专栏。 Visual Studio Code的安装非常简单&#xff0c;就不放这里增加文章篇幅了。 相比PyCharm&#xff0c;VSCode更加轻量&#xff0c;启动速度快。并且搭配Python插件就能实现和Pycharm一样的代码提示、高…

在手机在线预览3D模型,是如何实现的?

在手机在线预览3D模型&#xff0c;主要依赖于几个关键技术和步骤来实现。以下是一个概括性的流程&#xff1a; 一、模型上传 选择平台&#xff1a;首先&#xff0c;用户需要选择一个支持3D模型在线预览的平台&#xff0c;如51建模网、Sketchfab等。这些平台通常提供用户友好的…

iPhone不停重启怎么办?全面解析与解决方案

iPhone作为当今最受欢迎的智能手机之一&#xff0c;其稳定性和流畅性一直备受用户赞誉。然而&#xff0c;有时我们可能会遇到iPhone不停重启的问题&#xff0c;这不仅影响了正常使用&#xff0c;还可能让我们感到焦虑和困扰。本文将为大家详细解析iPhone不停重启的原因&#xf…

常用的编写VBA的软件 (L*00K)

一、Microsoft Office套件 Microsoft Excel&#xff1a; Excel是VBA编程最为广泛使用的环境之一。用户可以通过编写宏来自动化重复性的任务&#xff0c;如数据整理、自动填充、复杂的计算等。Excel中的VBA功能让用户能够创建复杂的函数、表单以及完整的应用程序&#xff0c;以…

html+css网页设计 个人网站模版 我的书屋5个页面

htmlcss网页设计 个人网站模版 我的书屋5个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 …

华为大动作:三折折叠屏手机9月亮相,价格破万引猜疑

在科技迅猛发展的今天&#xff0c;智能手机的形态和功能不断突破传统边界&#xff0c;为用户带来前所未有的体验。华为&#xff0c;作为全球通信领域的领军企业&#xff0c;一直在折叠屏技术上推陈出新。 近日&#xff0c;华为即将发布的首款三折折叠屏手机成为了市场的焦点&a…