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、在当前鼠标位置显示菜单
-
- 5、新增菜单被触发后槽函数,并连接信号与槽
- 6、实现槽函数
- 6.1 添加弹窗头文件
- 6.2 添加弹窗资源文件
- 6.3槽函数实现
- 7、.h文件和.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); quitMes.setButtonText(QMessageBox::Ok, "确认"); quitMes.setButtonText(QMessageBox::Cancel,"取消"); int result = quitMes.exec(); if(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
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); quitMes.setButtonText(QMessageBox::Ok, "确认"); quitMes.setButtonText(QMessageBox::Cancel,"取消"); int result = quitMes.exec(); 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); quitMes.setButtonText(QMessageBox::Ok, "确认"); quitMes.setButtonText(QMessageBox::Cancel,"取消"); int result = quitMes.exec(); if(result == QMessageBox::Ok){this->close(); }else {}
}
8、总结
以上就是Qt实现鼠标右键弹出弹窗退出的整个过程了,浏览过程中,如若发现错误,欢
迎大家指正,有问题的可以评论区留言或者私信。 最后,如果大家觉得有所帮助的话,
可以点个赞,谢谢大家!梦虽遥,追则能达;愿虽艰,持则可圆! |
Qt实现鼠标右键弹出弹窗退出完成!