Qt 上下文菜單

上下文菜單的使用(初級)

上下文菜單可通過鼠標右鍵點擊彈出。主要描述下基本的上下文菜單的框架應該怎麼寫。
只要涉及菜單的操作一般使用 QMenu 和QAction 都能夠解決。

方法1

通過重寫contextMenuEvent(QContextMenuEvent *e)實現

void MainWindow::contextMenuEvent(QContextMenuEvent *e)
{
    popmenu->addAction(copyAction);
    popmenu->addAction(pasteAction);
    popmenu->addAction(deletAction);
    popmenu->exec(QCursor::pos());
    e->accept();
}

完整代碼如下

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

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

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    QMenu *popmenu;
    QAction *copyAction;
    QAction *pasteAction;
    QAction *deletAction;
    void contextMenuEvent(QContextMenuEvent *);

};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    popmenu = new QMenu(this);
    copyAction = new QAction("copy",this);
    pasteAction = new QAction("paste",this);
    deletAction = new QAction("delete",this);
    copyAction->setIcon(QIcon(":/Icon/copy.png"));
    pasteAction->setIcon(QIcon(":/Icon/parst.png"));
    deletAction->setIcon(QIcon(":/Icon/delet.png"));
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::contextMenuEvent(QContextMenuEvent *e)
{
    popmenu->addAction(copyAction);
    popmenu->addAction(pasteAction);
    popmenu->addAction(deletAction);
    //彈出的位置爲當前光標的位置
    popmenu->exec(QCursor::pos());
    e->accept();
}

方法2

通過在構造函數中直接加入action
然後使用setContextMenuPolicy設置爲ActionsContextMenu

    copyAction = new QAction("copy",this);
    pasteAction = new QAction("paste",this);
    deletAction = new QAction("delete",this);
    copyAction->setIcon(QIcon(":/Icon/copy.png"));
    pasteAction->setIcon(QIcon(":/Icon/parst.png"));
    deletAction->setIcon(QIcon(":/Icon/delet.png"));
    addAction(copyAction);
    addAction(pasteAction);
    addAction(deletAction);
    setContextMenuPolicy(Qt::ActionsContextMenu);

效果如下:
這裏寫圖片描述

發佈了83 篇原創文章 · 獲贊 20 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章