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

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

给QPushButton添加右键菜单,其中ActionsContextMenu相对比较方便实现。说是给QPushButton添加右键菜单,其实对于所有的QWidget都是可以的,也就是说这种方法适合给所有的QWidget添加右键菜单。只需要继承QWidget,然后设置使用Actions Context菜单,创建自己需要的QAction,addAction并且将对应的槽函数和action连接起来,就可以实现了。下面以QPushButton为例详细说明一下:

在头文件中声明自己所需要的QAction:

QAction *m_actionOne;
	QAction *m_actionTwo;
	QAction *m_actionThree;

声明对应QAction的槽函数:

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

在源文件中设置使用Actions Context菜单:

setContextMenuPolicy(Qt::ActionsContextMenu);

创建每个QAction,并且添加addAction,设置每个action的菜单名称:

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");

	addAction(m_actionOne);
	addAction(m_actionTwo);
	addAction(m_actionThree);

实现对应的槽函数:

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

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

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

将槽函数和action对应连接起来:

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

编译,运行,就可以查看结果了:


点击菜单中对应的action,就可以激发对应的槽函数,并执行你具体实现的功能,

在这里我只是做了简单的输出字符串,在控制台可以查看:

完整代码:

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

class ButtonContextMenu : public QPushButton
{
	Q_OBJECT

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

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

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

#endif // BUTTONCONTEXTMENU_H
#include "buttoncontextmenu.h"
#include <QDebug>

ButtonContextMenu::ButtonContextMenu(QWidget *parent)
	: QPushButton(parent)
{
	setContextMenuPolicy(Qt::ActionsContextMenu);

	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");

	addAction(m_actionOne);
	addAction(m_actionTwo);
	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()));
}

ButtonContextMenu::~ButtonContextMenu()
{

}

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

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

void ButtonContextMenu::actionThreeSlot()
{
	qDebug() << "actionThree";
}
#include "buttoncontextmenu.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	QWidget w;
	ButtonContextMenu b(&w);
	b.setText("Button");
	w.show();
	return a.exec();
}

源码下载:Qt学习之QPushButton右键菜单_qpushbutton菜单,qpushbutton右键菜单-C++代码类资源-CSDN下载

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

交流QQ:1245178753

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GreenArrowMan

请打钱~

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

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

打赏作者

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

抵扣说明:

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

余额充值