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.效果測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM