您的位置:首页 > 新闻 > 会展 > 东莞今天新增疫情_厦门网站制作收费_合肥关键词排名优化_武汉最新消息今天

东莞今天新增疫情_厦门网站制作收费_合肥关键词排名优化_武汉最新消息今天

2025/1/15 22:57:02 来源:https://blog.csdn.net/qq_62435866/article/details/144987134  浏览:    关键词:东莞今天新增疫情_厦门网站制作收费_合肥关键词排名优化_武汉最新消息今天
东莞今天新增疫情_厦门网站制作收费_合肥关键词排名优化_武汉最新消息今天

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、结论

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

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

赞,谢谢大家!

愿大家多喜乐,长安宁!

鼠标拖动窗口完成!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com