Qt右鍵菜單的幾種實現方法

1.  修改右鍵菜單策略

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    addAction(new QAction("新增",this));
    addAction(new QAction("刪除",this));

    setContextMenuPolicy(Qt::ActionsContextMenu);
}

構造函數中直接用addAction添加了兩個菜單項,setContextMenuPolicy(Qt::ActionsContextMenu)這一句是啓動右鍵菜單策略,然後運行右擊就會有菜單彈出。運行如下。

2. 重寫mousePressEvent()方法。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_contextMenu = new QMenu;  //這是右擊彈出的菜單
    m_addAction = new QAction("新增",this);
    m_delAction = new QAction("刪除",this);
    //給菜單添加菜單項
    m_contextMenu->addAction(m_addAction);
    m_contextMenu->addAction(m_delAction);
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    //確保右鍵點擊,然後跳出菜單.
    if (event->button() == Qt::RightButton)
    {
        //在鼠標右擊的地方彈出菜單
        m_contextMenu->exec(event->globalPos());
    }

    event->accept();
}

3. 重寫contextMenuEvent()

同2,只需要把mousePressEvent()換成contextMenuEvent();具體代碼如下。

void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{
    //讓菜單移動到鼠標位置並顯示.
    m_contextMenu->exec(event->globalPos());
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章