zoukankan      html  css  js  c++  java
  • 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界面

    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.效果测试

  • 相关阅读:
    零知识证明 SNARKs 第2部分:多项式盲估
    零知识证明 SNARKs 第3部分:知识系数测试和假设
    零知识证明 SNARKs 第4部分:如何进行可验证多项式盲估
    网站渗透测试原理及详细过程
    网站渗透测试原理及详细过程
    网站渗透测试原理及详细过程
    网站渗透测试原理及详细过程
    Java网络编程从入门到精通(27):关闭服务端连接
    Java网络编程从入门到精通(27):关闭服务端连接
    Java网络编程从入门到精通(27):关闭服务端连接
  • 原文地址:https://www.cnblogs.com/LifeoFHanLiu/p/9931192.html
Copyright © 2011-2022 走看看