Qt鼠标右键弹出弹窗退出
- 1、鼠标右键实现
- 1.1 重写鼠标点击事件
- 1.2 添加头文件
- 1.3 添加定义
- 2、添加菜单
- 2.1添加菜单头文件
- 2.2创建菜单对象
- 2.3 显示菜单
- 3、添加动作
- 3.1添加动作资源文件
- 3.2 添加头文件
- 3.3 创建退出动作对象
- 3.4菜单添加动作对象
- 4、在当前鼠标位置显示菜单
- 4.1当前鼠标位置显示菜单
- 5、新增菜单被触发后槽函数,并连接信号与槽
- 6、实现槽函数
- 6.1 添加弹窗头文件
- 6.2 添加弹窗资源文件
- 6.3槽函数实现
- 7、.h文件和.cpp文件
- 7.1 .h文件
- 7.2 .cpp文件
- 8、总结
1、鼠标右键实现
1.1 重写鼠标点击事件
protected:void mousePressEvent(QMouseEvent *event) override; //重写鼠标点击事件

1.2 添加头文件

1.3 添加定义
//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::RightButton){}
}
2、添加菜单
2.1添加菜单头文件

2.2创建菜单对象
QMenu *quitMenu; //创建退出菜单指针
quitMenu = new QMenu(this); //创建菜单对象
2.3 显示菜单
//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::RightButton){quitMenu->exec(); //显示菜单}
}
3、添加动作
3.1添加动作资源文件
| 先去网站下载图标 |
图标网站链接
| 下载图标 |

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

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


3.2 添加头文件

3.3 创建退出动作对象
QAction *quitAction = new QAction(QIcon(":/widdgetMainInterface/exit.png"),"退出",this);
3.4菜单添加动作对象
quitMenu->addAction(quitAction); //菜单添加动作对象
4、在当前鼠标位置显示菜单
4.1当前鼠标位置显示菜单
//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos()); //当前鼠标位置显示菜单}
}
5、新增菜单被触发后槽函数,并连接信号与槽

//连接菜单被触发的信号与槽
connect(quitMenu,&QMenu::triggered,this,&wearherMainInterface::quitMenuTriggered);
6、实现槽函数
6.1 添加弹窗头文件

6.2 添加弹窗资源文件
| 跟上面步骤一样 |
6.3槽函数实现
//菜单被触发后槽函数
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(); //显示信息框等待用户交互//如果用户选择了Okif(result == QMessageBox::Ok){this->close(); //关闭界面}else //用户取消什么都不做{}
}
7、.h文件和.cpp文件
7.1 .h文件
#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_OBJECTpublic: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文件
#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(); //显示信息框等待用户交互//如果用户选择了Okif(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(); //显示信息框等待用户交互//如果用户选择了Okif(result == QMessageBox::Ok){this->close(); //关闭界面}else //用户取消什么都不做{}
}
8、总结
| 以上就是Qt实现鼠标右键弹出弹窗退出的整个过程了,浏览过程中,如若发现错误,欢 迎大家指正,有问题的可以评论区留言或者私信。 最后,如果大家觉得有所帮助的话, 可以点个赞,谢谢大家!梦虽遥,追则能达;愿虽艰,持则可圆! |
