1.概要
qt 创建一个右键点击后出现的菜单
2.代码
2.1 类 MyWidget
2.1.1 头文件
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QMenu>
#include <QContextMenuEvent>
class MyWidget : public QWidget {
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
~MyWidget();
protected:
void contextMenuEvent(QContextMenuEvent *event) override;
private slots:
void onActionNewTriggered();
void onActionOpenTriggered();
private:
QMenu *contextMenu;
QAction *actionNew;
QAction *actionOpen;
};
#endif // MYWIDGET_H
2.1.2 源文件
#include "mywidget.h"
#include <QAction>
#include <QDebug>
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) {
// 创建动作
actionNew = new QAction(tr("&New"), this);
actionOpen = new QAction(tr("&Open..."), this);
// 创建上下文菜单
contextMenu = new QMenu(this);
contextMenu->addAction(actionNew);
contextMenu->addAction(actionOpen);
// 连接信号和槽
connect(actionNew, &QAction::triggered, this, &MyWidget::onActionNewTriggered);
connect(actionOpen, &QAction::triggered, this, &MyWidget::onActionOpenTriggered);
}
MyWidget::~MyWidget() {
// 清理资源,如果需要的话(在这个例子中,Qt会自动处理QAction和QMenu的内存管理)
}
void MyWidget::contextMenuEvent(QContextMenuEvent *event) {
contextMenu->exec(event->globalPos());
}
void MyWidget::onActionNewTriggered() {
qDebug() << "New file action triggered";
// 在这里实现“新建”功能的代码
}
void MyWidget::onActionOpenTriggered() {
qDebug() << "Open file action triggered";
// 在这里实现“打开”功能的代码
}
2.2 程序入口
#include <QApplication>
#include "mywidget.h"
//qt 创建一个右键点击后出现的菜单;将用到Q_OBJECT的类的头文件和源文件分开
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
3.运行结果
QT右键菜单实验