Qt之给控件添加右键菜单

1.重点

既然要给控件添加右键菜单,那如何让控件知道我们点击了它呢?

首先需要给控件设置上下文菜单策略 setContextMenuPolicy(Qt::CustomContextMenu) ;设置该策略后当我们右键点击控件时qt会发送一个信号 void QWidget::customContextMenuRequested(const QPoint &pos) ,其中参数pos用来传递右键点击时的鼠标的坐标,这个坐标一般是相对于控件左上角而言的;最后给这个信号设置相应的槽函数,在槽函数中将菜单展示出来就行了。

2.步骤概览

//初始化动作

//初始化菜单

//动作添加到菜单

//给动作设置信号槽

//给控件设置上下文菜单策略

//给信号 void QWidget::customContextMenuRequested(const QPoint &pos)设置相应的槽函数

3.代码实现

在例子中我给PushBUtton添加了一个菜单,菜单中加入了两个动作,分别给每个动作设置信号槽;同样给TextLabel添加一个菜单,菜单中加入了两个动作,分别给每个动作设置信号槽。

3.1界面

image.png

3.2详细代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QAction>
#include<QMenu>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    //声明动作
    QAction * buttonAction1;
    QAction * buttonAction2;

    QAction * lableAction1;
    QAction * lableAction2;
    //声明菜单
    QMenu * buttonMenu;
    QMenu * lableMenu;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //初始化动作
    buttonAction1 = new QAction("btnFirstAction",this);
    buttonAction2 = new QAction("btnSecondAction",this);

    lableAction1 = new QAction("lbFirstAction",this);
    lableAction2 = new QAction("lbSecondAction",this);

    //初始化菜单
    buttonMenu = new QMenu(this);

    lableMenu = new QMenu(this);
    //动作添加到菜单
    buttonMenu->addAction(buttonAction1);
    buttonMenu->addAction(buttonAction2);

    lableMenu->addAction(lableAction1);
    lableMenu->addAction(lableAction2);

    //给动作设置信号槽
    connect( buttonAction1, &QAction::triggered, [=]()
    {
        qDebug()<<"I'm btnFirstAction";
    });
    connect( buttonAction2, &QAction::triggered, [=]()
    {
        qDebug()<<"I'm btnSecondAction";
    });
    connect( lableAction1, &QAction::triggered, [=]()
    {
        qDebug()<<"I'm lbFirstAction";
    });
    connect( lableAction2, &QAction::triggered, [=]()
    {
        qDebug()<<"I'm lbSecondAction";
    });

    //给控件设置上下文菜单策略
    ui->label->setContextMenuPolicy(Qt::CustomContextMenu);
    //鼠标右键点击控件时会发送一个void QWidget::customContextMenuRequested(const QPoint &pos)信号
    //给信号设置相应的槽函数
    connect(ui->label,&QLabel::customContextMenuRequested,[=](const QPoint &pos)
    {
        qDebug()<<pos;//参数pos用来传递右键点击时的鼠标的坐标,这个坐标一般是相对于控件左上角而言的
        lableMenu->exec(QCursor::pos());
    });

    ui->pushButton->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->pushButton,&QPushButton::customContextMenuRequested,[=](const QPoint &pos)
    {
        qDebug()<<pos;
        buttonMenu->exec(QCursor::pos());
    });


}

MainWindow::~MainWindow()
{
    delete ui;
}

4.效果测试

image.png


--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864