Qt实现右键菜单栏显示

  1. 用到头文件
    qmenu.h qevent.h qlabel.h
  2. 代码
	#pragma once
// QtTestMenu2.h
#include 
#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. 显示效果
    Qt实现右键菜单栏显示_第1张图片

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

你可能感兴趣的:(Qt,qt,开发语言)