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()));
编译,运行,就可以查看结果了:

Qt学习之给QPushButton添加菜单ActionsContextMenu方法_第1张图片
点击菜单中对应的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();
}
源码下载:http://download.csdn.net/detail/u011417605/9465246

本文地址:http://blog.csdn.net/u011417605/article/details/50921207

交流QQ:1245178753

你可能感兴趣的:(qt,菜单,QPushButton)