Qt鼠标右键弹出弹窗退出
- 1、鼠标右键实现
- [1.1 重写鼠标点击事件](#1.1 重写鼠标点击事件)
- [1.2 添加头文件](#1.2 添加头文件)
- [1.3 添加定义](#1.3 添加定义)
- 2、添加菜单
-
- 2.1添加菜单头文件
- 2.2创建菜单对象
- [2.3 显示菜单](#2.3 显示菜单)
- 3、添加动作
-
- 3.1添加动作资源文件
- [3.2 添加头文件](#3.2 添加头文件)
- [3.3 创建退出动作对象](#3.3 创建退出动作对象)
- 3.4菜单添加动作对象
- 4、在当前鼠标位置显示菜单
- 5、新增菜单被触发后槽函数,并连接信号与槽
- 6、实现槽函数
-
- [6.1 添加弹窗头文件](#6.1 添加弹窗头文件)
- [6.2 添加弹窗资源文件](#6.2 添加弹窗资源文件)
- 6.3槽函数实现
- 7、.h文件和.cpp文件
-
- [7.1 .h文件](#7.1 .h文件)
- [7.2 .cpp文件](#7.2 .cpp文件)
- 8、总结
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实现鼠标右键弹出弹窗退出完成!