Qt学习之给QPushButton添加菜单DefaultContextMenu方法

                      欢迎关注公众号可以查看更多完整文章

本篇以QPushButton为例实现添加右键菜单,使用DefaultContextMenu方式进行实现。

大体思路和前面两篇添加菜单的方式还是差不多的。虽然是以QPushButton为例进行实现,但是对于所有QWidget添加右键菜单都是适合的。

不同的是菜单策略,DefaultContextMenu需要继承contextMenuEvent事件,

void contextMenuEvent(QContextMenuEvent *event);

设置使用菜单的策略是

setContextMenuPolicy(Qt::DefaultContextMenu);

然后实现contextMenuEvent事件

void DefaultMenu::contextMenuEvent(QContextMenuEvent *event)
{
	__super::contextMenuEvent(event);
	m_menu->exec(QCursor::pos());
}

因为QMenu肯定是要显示在光标处,所以可以使用QCursor::pos()来获取光标的当前位置。

实现后的效果如下:



完整代码:

#ifndef DEFAULTMENU_H
#define DEFAULTMENU_H

#include <QtWidgets/QPushButton>
#include <QAction>
#include <QMenu>
#include <QDebug>

class DefaultMenu : public QPushButton
{
	Q_OBJECT

public:
	DefaultMenu(QWidget *parent = 0);
	~DefaultMenu();

	void contextMenuEvent(QContextMenuEvent *event);

protected slots:
	void actionOneSlot();
	void actionTwoSlot();
	void actionThreeSlot();

private:
	QMenu *m_menu;
	QAction *m_actionOne;
	QAction *m_actionTwo;
	QAction *m_actionThree;
};

#endif // DEFAULTMENU_H
#include "defaultmenu.h"

DefaultMenu::DefaultMenu(QWidget *parent)
	: QPushButton(parent)
{
	setContextMenuPolicy(Qt::DefaultContextMenu);

	m_menu = new QMenu(this);
	m_actionOne = new QAction(this);
	m_actionTwo = new QAction(this);
	m_actionThree = new QAction(this);

	m_actionOne->setText("ActionOne");
	m_actionTwo->setText("ActionTwo");
	m_actionThree->setText("ActionThree");

	m_menu->addAction(m_actionOne);
	m_menu->addAction(m_actionTwo);
	m_menu->addAction(m_actionThree);

	connect(m_actionOne, SIGNAL(triggered()), this, SLOT(actionOneSlot()));
	connect(m_actionTwo, SIGNAL(triggered()), this, SLOT(actionTwoSlot()));
	connect(m_actionThree, SIGNAL(triggered()), this, SLOT(actionThreeSlot()));
}

DefaultMenu::~DefaultMenu()
{

}

void DefaultMenu::actionOneSlot()
{
	qDebug() << "actionOne";
}

void DefaultMenu::actionTwoSlot()
{
	qDebug() << "actionTwo";
}

void DefaultMenu::actionThreeSlot()
{
	qDebug() << "actionThree";
}

void DefaultMenu::contextMenuEvent(QContextMenuEvent *event)
{
	__super::contextMenuEvent(event);
	m_menu->exec(QCursor::pos());
}
#include "defaultmenu.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QWidget w;
	DefaultMenu b(&w);
	b.setText("Button");
	w.show();
	return a.exec();
}

源码下载:Qt学习之QPushButton添加右键菜单2.zip_qpushbutton右键菜单,qt添加右键菜单-C++代码类资源-CSDN下载

本文地址:Qt学习之给QPushButton添加菜单DefaultContextMenu方法_GreenArrowMan-CSDN博客-CSDN博客

交流QQ:1245178753

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenArrowMan

请打钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值