Qt实现右键菜单栏显示

  1. 用到头文件
    qmenu.h qevent.h qlabel.h
  2. 代码
	#pragma once
// QtTestMenu2.h
#include <QtWidgets/QWidget>
#include "ui_QtTestMenu2.h"
#include "qmenu.h"
#include "qevent.h"
#include "qlabel.h"

class QtTestMenu2 : public QWidget
{
    Q_OBJECT

public:
    QtTestMenu2(QWidget *parent = nullptr);
    ~QtTestMenu2();
    virtual void mousePressEvent(QMouseEvent*);
private:
    void createMenu();
private slots:
    void slotMenuClicked(QAction*);
private:
    Ui::QtTestMenu2Class ui;

    QMenu* m_pMenu;
    QAction* m_pActionAdd;
    QAction* m_pActionDel;
    QAction* m_pActionEdit;

    QMenu* m_pMenuTest;
    QAction* m_pActionTest1;
    QAction* m_pActionTest2;

    QLabel* mLab;
};

QtTestMenu2.cpp

#include "QtTestMenu2.h"

QtTestMenu2::QtTestMenu2(QWidget *parent)
    : QWidget(parent)
    , mLab(new QLabel(this))
{
    ui.setupUi(this);
    mLab->setMinimumSize(QSize(this->width() / 2, this->height() / 2));
    createMenu();
}

QtTestMenu2::~QtTestMenu2()
{}

void QtTestMenu2::mousePressEvent(QMouseEvent* e)
{
    if (e->button() == Qt::RightButton) {
        m_pMenu->exec(QCursor::pos());
    }
}

void QtTestMenu2::createMenu()
{
    m_pMenu = new QMenu(this);
    m_pActionAdd = m_pMenu->addAction(tr("Add"));
    m_pActionDel = m_pMenu->addAction(tr("Del"));
    m_pActionEdit = m_pMenu->addAction(tr("Edit"));
	m_pMenu->addSeparator();
    QIcon icon(QPixmap("f://test.jpg"));
    m_pMenu->addMenu(icon,"test QIcon");

    m_pMenuTest = new QMenu(this);
    m_pMenuTest->setTitle(tr("Test"));
    m_pActionTest1 = m_pMenuTest->addAction(tr("Test1"));
    m_pActionTest2 = m_pMenuTest->addAction(tr("Test2"));
    m_pMenu->addMenu(m_pMenuTest);

    connect(m_pMenu, &QMenu::triggered, this, &QtTestMenu2::slotMenuClicked);
}

void QtTestMenu2::slotMenuClicked(QAction* ac) 
{
    if (ac == m_pActionAdd) {
        this->mLab->setText("Add");
    } else if (ac == m_pActionDel) {
        this->mLab->setText("Del");
    } else if (ac == m_pActionEdit) {
        this->mLab->setText("Edit");
    } else if (ac == m_pActionTest2) {
        this->mLab->setText("Test2");
    } else if (ac == m_pActionTest1) {
        this->mLab->setText("Test1");
    } 
}
// 
  1. 显示效果
    在这里插入图片描述

  2. 代码结构说明
    4.1 重写 mousePressEvent 当鼠标右键按下将菜单栏显示到鼠标点击位置
    4.2 点击菜单栏的项目触发 triggered(QAction*) 信号, 我们在槽函数中对信号进行反馈;
    4.3 初始化就添加菜单栏和选项

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值