欢迎关注公众号可以查看更多完整文章
给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