上下文菜單的使用(初級)
上下文菜單可通過鼠標右鍵點擊彈出。主要描述下基本的上下文菜單的框架應該怎麼寫。
只要涉及菜單的操作一般使用 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);
效果如下: