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

来源:互联网 发布:考勤机软件下载 编辑:程序博客网 时间:2024/06/04 19:58

给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_OBJECTpublic: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

1 0
原创粉丝点击