Qt实现鼠标右键弹出弹窗退出

Qt鼠标右键弹出弹窗退出

1、鼠标右键实现

1.1 重写鼠标点击事件

cpp 复制代码
protected:
    void mousePressEvent(QMouseEvent *event) override;          //重写鼠标点击事件

1.2 添加头文件

1.3 添加定义

cpp 复制代码
//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::RightButton)
    {
        
    }
}

2、添加菜单

2.1添加菜单头文件

2.2创建菜单对象

cpp 复制代码
QMenu *quitMenu;            //创建退出菜单指针
cpp 复制代码
quitMenu = new QMenu(this);     //创建菜单对象

2.3 显示菜单

cpp 复制代码
//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::RightButton)
    {
        quitMenu->exec();           //显示菜单
    }
}

3、添加动作

3.1添加动作资源文件

|----------|
| 先去网站下载图标 |

图标网站链接

|------|
| 下载图标 |

|------------------|
| 下载的图标剪切到你的资源文件夹下 |

|--------------------------|
| 添加现有文件,没有资源文件要自己新建一个资源文件 |


3.2 添加头文件

3.3 创建退出动作对象

cpp 复制代码
QAction *quitAction = new QAction(QIcon(":/widdgetMainInterface/exit.png"),"退出",this);

3.4菜单添加动作对象

cpp 复制代码
quitMenu->addAction(quitAction);             //菜单添加动作对象

4、在当前鼠标位置显示菜单

4.1当前鼠标位置显示菜单

cpp 复制代码
//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::RightButton)
    {
        quitMenu->exec(QCursor::pos());           //当前鼠标位置显示菜单
    }
}

5、新增菜单被触发后槽函数,并连接信号与槽

cpp 复制代码
//连接菜单被触发的信号与槽
connect(quitMenu,&QMenu::triggered,this,&wearherMainInterface::quitMenuTriggered);  

6、实现槽函数

6.1 添加弹窗头文件

6.2 添加弹窗资源文件

|---------|
| 跟上面步骤一样 |

6.3槽函数实现

cpp 复制代码
//菜单被触发后槽函数
void wearherMainInterface::quitMenuTriggered()
{
    QMessageBox quitMes;                        //创建退出弹窗对象
    quitMes.setWindowTitle("关闭界面");          //弹窗标题
    quitMes.setWindowIcon(QIcon(":/widdgetMainInterface/exit.png"));        //设置窗口图标
    quitMes.setIcon(QMessageBox::Warning);      //弹窗图片
    quitMes.setText("是否关闭弹窗");              //弹窗文本
    
    quitMes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);      //设置Ok和Cancle两个按钮
    quitMes.setButtonText(QMessageBox::Ok, "确认");           //Ok改为确认
    quitMes.setButtonText(QMessageBox::Cancel,"取消");        //Cancle改为取消
    
    int result = quitMes.exec();       //显示信息框等待用户交互
    //如果用户选择了Ok
    if(result == QMessageBox::Ok)
    {
        this->close();          //关闭界面
    }
    else    //用户取消什么都不做
    {
        
    }  
}

7、.h文件和.cpp文件

7.1 .h文件

cpp 复制代码
#ifndef WEARHERMAININTERFACE_H
#define WEARHERMAININTERFACE_H

#include <QWidget>
#include <QMouseEvent>
#include <QMenu>
#include <QAction>
#include <QMessageBox>

namespace Ui {
class wearherMainInterface;
}

class wearherMainInterface : public QWidget
{
    Q_OBJECT

public:
    explicit wearherMainInterface(QWidget *parent = nullptr);
    ~wearherMainInterface();

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


private slots:
    void on_quitPushButton_clicked();               //退出按钮
    void quitMenuTriggered();                       //菜单被触发后处理槽函数

private:
    Ui::wearherMainInterface *ui;

    QMenu *quitMenu;            //创建退出菜单指针

};

#endif // WEARHERMAININTERFACE_H

7.2 .cpp文件

cpp 复制代码
#include "wearhermaininterface.h"
#include "ui_wearhermaininterface.h"


wearherMainInterface::wearherMainInterface(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::wearherMainInterface)
{
    ui->setupUi(this);

    quitMenu = new QMenu(this);     //创建菜单对象
    QAction *quitAction = new QAction(QIcon(":/widdgetMainInterface/exit.png"),"退出",this);
    quitMenu->addAction(quitAction);             //菜单添加动作对象

    //连接菜单被触发的信号与槽
    connect(quitMenu,&QMenu::triggered,this,&wearherMainInterface::quitMenuTriggered);


}

wearherMainInterface::~wearherMainInterface()
{
    delete ui;
}

//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::RightButton)
    {
        quitMenu->exec(QCursor::pos());           //当前鼠标位置显示菜单
    }
}

//退出按钮
void wearherMainInterface::on_quitPushButton_clicked()
{
    QMessageBox quitMes;                        //创建退出弹窗对象
    quitMes.setWindowTitle("关闭界面");          //弹窗标题
    quitMes.setWindowIcon(QIcon(":/widdgetMainInterface/MesPanda.png"));        //设置窗口图标
    quitMes.setIcon(QMessageBox::Warning);      //弹窗图片
    quitMes.setText("是否关闭弹窗");              //弹窗文本

    quitMes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);      //设置Ok和Cancle两个按钮
    quitMes.setButtonText(QMessageBox::Ok, "确认");           //Ok改为确认
    quitMes.setButtonText(QMessageBox::Cancel,"取消");        //Cancle改为取消

    int result = quitMes.exec();       //显示信息框等待用户交互
    //如果用户选择了Ok
    if(result == QMessageBox::Ok)
    {
        this->close();          //关闭主界面
    }
    else    //用户取消什么都不做
    {

    }
}

//菜单被触发后槽函数
void wearherMainInterface::quitMenuTriggered()
{
    QMessageBox quitMes;                        //创建退出弹窗对象
    quitMes.setWindowTitle("关闭界面");          //弹窗标题
    quitMes.setWindowIcon(QIcon(":/widdgetMainInterface/MesPanda.png"));        //设置窗口图标
    quitMes.setIcon(QMessageBox::Warning);      //弹窗图片
    quitMes.setText("是否关闭弹窗");              //弹窗文本

    quitMes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);      //设置Ok和Cancle两个按钮
    quitMes.setButtonText(QMessageBox::Ok, "确认");           //Ok改为确认
    quitMes.setButtonText(QMessageBox::Cancel,"取消");        //Cancle改为取消

    int result = quitMes.exec();       //显示信息框等待用户交互
    //如果用户选择了Ok
    if(result == QMessageBox::Ok)
    {
        this->close();          //关闭界面
    }
    else    //用户取消什么都不做
    {

    }
}

8、总结

|---------------------------------------------------------------------------------------------------------------|
| 以上就是Qt实现鼠标右键弹出弹窗退出的整个过程了,浏览过程中,如若发现错误,欢 迎大家指正,有问题的可以评论区留言或者私信。 最后,如果大家觉得有所帮助的话, 可以点个赞,谢谢大家!梦虽遥,追则能达;愿虽艰,持则可圆! |

Qt实现鼠标右键弹出弹窗退出完成!

相关推荐
IvorySQL10 小时前
PostgreSQL 日报 | JOIN 与外键优化(8 月 9 日)
数据库·postgresql
ltl10 小时前
自治数据库十年回顾:Peloton、NoisePage、OtterTune 到云原生 auto-tuning
数据库
我是小灰灰吖11 小时前
QT在线安装器使用指南:从下载到配置完整教程
linux·qt·ubuntu
灯澜忆梦12 小时前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化
C++ 老炮儿的技术栈13 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
MC皮蛋侠客13 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
zt1985q15 小时前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·网络协议·开源
我是小灰灰吖16 小时前
Ubuntu 22.04 + Qt 6.9.3 应用程序打包与部署完整指南
qt·ubuntu
IvorySQL16 小时前
PostgreSQL 日报| PostgreSQL 19 默认 WAL 压缩算法(8 月 8 日)
数据库·postgresql·区块链
油丶酸萝卜别吃16 小时前
MySQL B+ 树查询全过程详解
数据库·mysql