Qt天气预报系统鼠标拖动窗口

devtools/2025/1/12 0:17:31/

Qt天气预报系统

  • 1、鼠标拖动窗口
    • 1.1重写鼠标移动函数
    • 1.2添加定义
    • 1.3定义一个偏移值
    • 1.4判断鼠标左键是否被按下
    • 1.5计算当前鼠标位置与窗口左上角位置的偏移值
    • 1.6移动窗口
  • 2、.h文件和.cpp文件
    • 2.1 .h文件
    • 2.2 .cpp文件
  • 3、结论

1、鼠标拖动窗口

1.1重写鼠标移动函数

protected:void mousePressEvent(QMouseEvent *event) override;      //重写鼠标点击事件函数void mouseMoveEvent(QMouseEvent *event) override;       //重写鼠标移动事件函数

在这里插入图片描述

1.2添加定义

把鼠标移动到mouseMoveEvent上,ALT+Enter选择添加定义

在这里插入图片描述

1.3定义一个偏移值

private:Ui::MainWindow *ui;QMenu *quitMenu;                            //创建一个菜单指针QAction *quitAct;                           //定义一个动作QPoint moffset;                             //窗口移动时,鼠标与窗口左上角的偏移值

1.4判断鼠标左键是否被按下

void MainWindow::mousePressEvent(QMouseEvent *event)
{//如果右键被按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());       //在当前鼠标位置显示菜单}if(event->button() == Qt::LeftButton){}
}

1.5计算当前鼠标位置与窗口左上角位置的偏移值

void MainWindow::mousePressEvent(QMouseEvent *event)
{//如果右键被按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());       //在当前鼠标位置显示菜单}//当前鼠标位置 event->globalPos()//当前窗口位置 this->pos()if(event->button() == Qt::LeftButton){moffset = event->globalPos() - this->pos();}
}

1.6移动窗口

//鼠标移动
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset);    //移动窗口
}
运行之后,窗口可以成功拖动,达到预期效果

2、.h文件和.cpp文件

2.1 .h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMenu>
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void mousePressEvent(QMouseEvent *event) override;      //重写鼠标点击事件函数void mouseMoveEvent(QMouseEvent *event) override;       //重写鼠标移动事件函数private slots:void on_pushButton_quit_clicked();          //关闭UI界面void onQuitActTriggered();                  //菜单被点击后的处理private:Ui::MainWindow *ui;QMenu *quitMenu;                            //创建一个菜单指针QAction *quitAct;                           //定义一个动作QPoint moffset;                             //窗口移动时,鼠标与窗口左上角的偏移值bool closePOPWindow();                      //关闭窗口的弹窗
};
#endif // MAINWINDOW_H

2.2 .cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QMouseEvent>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowFlag(Qt::FramelessWindowHint);
//    this->setLayout(ui->gridLayoutGlobal);      //让界面随着窗口变幻大小quitMenu = new QMenu(this);         //创建一个QMenu对象quitAct = new QAction(QIcon(":/widget/quit.png"), tr("退出"), this);     //定义一个退出动作quitMenu->addAction(quitAct);       //添加动作//    connect(quitMenu,&QMenu::triggered,this,[=]{
//        this->close();
//    });         //连接信号与槽connect(quitMenu,&QMenu::triggered,this,&MainWindow::onQuitActTriggered);   //连接菜单被触发的信号与槽}MainWindow::~MainWindow()
{delete ui;
}//鼠标点击
void MainWindow::mousePressEvent(QMouseEvent *event)
{//如果右键被按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());       //在当前鼠标位置显示菜单}//当前鼠标位置 event->globalPos()//当前窗口位置 this->pos()if(event->button() == Qt::LeftButton){moffset = event->globalPos() - this->pos();}
}//鼠标移动
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset);    //移动窗口
}//弹窗
bool MainWindow::closePOPWindow()
{// 创建一个消息框询问用户是否真的要退出QMessageBox mes;mes.setWindowTitle("关闭窗口");//  mes.setWindowFlags(Qt::Drawer);       //把标题栏去掉mes.setIcon(QMessageBox::Warning);    //设置一个警告图片mes.setText("是否关闭窗口?");          //弹窗文本mes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);     //设置两个按钮mes.setWindowIcon(QIcon(":/widget/dog.png")); // 设置窗口图标mes.setButtonText(QMessageBox::Ok, tr("确定"));               //ok改为确认mes.setButtonText(QMessageBox::Cancel, tr("取消"));           //Cancel改为取消// 显示消息框并等待用户交互int result = mes.exec();// 根据用户的选择执行相应的操作if (result == QMessageBox::Ok) {// 用户选择了确定,关闭主窗口this->close();return true;}// 用户选择了取消,不关闭主窗口else{return false;     // 窗口关闭操作失败}
}//右上角退出
void MainWindow::on_pushButton_quit_clicked()
{closePOPWindow();
}//鼠标右键退出
void MainWindow::onQuitActTriggered()
{closePOPWindow();
}

3、结论

以上就是实现鼠标拖动窗口的整个过程了,浏览过程中,如若发现错误,欢迎大家指

正,有问题的可以评论区留言或者私信。最后,如果大家觉得有所帮助的话,可以点个

赞,谢谢大家!

愿大家多喜乐,长安宁!

鼠标拖动窗口完成!

http://www.ppmy.cn/devtools/149730.html

相关文章

新冠肺炎服务预约微信小程序的设计与实现ssm+论文源码调试讲解

第4章 系统设计 4.1 系统设计的原则 在系统设计过程中&#xff0c;也需要遵循相应的设计原则&#xff0c;这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性&#xff0c;安全性&#xff0c;可定制化&#xff0c;可扩展性&#xff0c;可…

springCloudGateWay使用总结

1、什么是网关 功能: ①身份认证、权限验证 ②服务器路由、负载均衡 ③请求限流 2、gateway搭建 2.1、创建一个空项目 2.2、引入依赖 2.3、加配置 3、断言工厂 4、过滤工厂 5、全局过滤器 6、跨域问题

智慧公厕大数据驱动下的公共卫生管理与优化

在快速发展的城市化进程中&#xff0c;公共卫生问题日益凸显&#xff0c;成为城市管理的重要议题。智慧公厕&#xff0c;作为公共卫生设施的一次革命性创新&#xff0c;正借助物联网技术的东风&#xff0c;引领公共卫生进入一个全新的生态时代。本文将深入探讨智慧公厕如何利用…

C语言:枚举类型

一、枚举类型的声明 枚举顾名思义就是一一列举。我们可以把可能的取值一一列举。比如我们现实生活中&#xff1a; 星期一到星期日是有限的7天&#xff0c;可以一一列举 &#xff1b;性别有&#xff1a;男、女、保密&#xff0c;也可以一一列举 &#xff1b;月份有12个月&#x…

Elixir语言的语法糖

Elixir语言的语法糖 引言 Elixir语言作为一种功能强大且灵活的编程语言&#xff0c;近年来在开源社区中产生了不小的影响。它被广泛应用于构建高并发、高可用性的应用程序&#xff0c;特别是在分布式系统和实时应用方面。不过&#xff0c;Elixir之所以受欢迎&#xff0c;除了…

远程和本地文件的互相同步

文章目录 1、rsync实现类似git push pull功能1. 基础概念2. 示例操作3. 定制化和进阶用法4. 定时同步&#xff08;类似自动化&#xff09; 2 命令简化1. 动态传参的脚本2. Shell 函数支持动态路径3. 结合环境变量和参数&#xff08;更简洁&#xff09;4. Makefile 支持动态路径…

Halcon在linux及ARM上的安装及c++工程化

一、HALCON下载 建议到HALCON官方下载页选择linux版本下载,压缩包名为MVTec_HALCON_Progress-18.11.0.1-linux(x64-aarch64-armv7a)-FullVersion.tar.gz。下载前需要登录HALCON帐号,如果没有请自行注册,填写一些基本信息然后激活邮件,操作方便简易。 下载许可证文件 该许…

python-leetcode-三数之和

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort() # 排序n len(nums)res []for i in range(n):# 剪枝&#xff1a;如果当前数 > 0&#xff0c;三数之和不可能为 0if nums[i]…