QMenu:QT鼠標右鍵彈出菜單


在用QT編程時,有時候要實現鼠標右鍵彈出菜單的功能.下面代碼演示鼠標右鍵彈出菜單.

1.新建一個QT工程,點擊MainWindow.ui,鼠標右鍵Go to slot.....,添加customContextMenuRequested(const QPoint &pos)事件

2.找到屬性頁中的contextMenuPolicy,把DefaultContextMenu改成CustomContextMenu.保存關閉MainWindow.ui

3.在on_MainWindow_customContextMenuRequested(const QPoint &pos)函數體添加一下代碼

void MainWindow::on_MainWindow_customContextMenuRequested(const QPoint &/*pos*/)
{
    //創建菜單對象
    QMenu *pMenu = new QMenu(this);

    QAction *pNewTask = new QAction(tr("新建任務"), this);
    QAction *pEditTask = new QAction(tr("設置任務"), this);
    QAction *pDeleteTask = new QAction(tr("刪除任務"), this);

    QAction *pToolRenName = new QAction(tr("改名工具"), this);
    QAction *pToolEdot = new QAction(tr("設置工具"), this);
    QAction *pToolDelete = new QAction(tr("刪除工具"), this);

    //1:新建任務 2:設置任務 3:刪除任務 4:改名工具 5:設置工具 6:刪除工具
    pNewTask->setData(1);
    pEditTask->setData(2);
    pDeleteTask ->setData(3);
    pToolRenName->setData(4);
    pToolEdot->setData(5);
    pToolDelete ->setData(6);

    //把QAction對象添加到菜單上
    pMenu->addAction(pNewTask);
    pMenu->addAction(pEditTask);
    pMenu->addAction(pDeleteTask);
    pMenu->addAction(pToolRenName);
    pMenu->addAction(pToolEdot);
    pMenu->addAction(pToolDelete);

    //連接鼠標右鍵點擊信號
    connect(pNewTask, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
    connect(pEditTask, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
    connect(pDeleteTask, SIGNAL(triggered()), SLOT(onTaskBoxContextMenuEvent()));
    connect(pToolRenName, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
    connect(pToolEdot, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
    connect(pToolDelete, SIGNAL(triggered()), SLOT(onTaskBoxContextMenuEvent()));

    //在鼠標右鍵點擊的地方顯示菜單
    pMenu->exec(cursor().pos());

    //釋放內存
    QList<QAction*> list = pMenu->actions();
    foreach (QAction* pAction, list) delete pAction;
    delete pMenu;
}

void MainWindow::onTaskBoxContextMenuEvent()
{
    QAction *pEven = qobject_cast<QAction *>(this->sender()); //this->sender()就是發信號者 QAction

    //獲取發送信息類型 1:新建任務 2:設置任務 3:刪除任務 4:改名工具 5:設置工具 6:刪除工具
    int iType = pEven->data().toInt();

    switch (iType)
    {
    case 1:
        QMessageBox::about(this, "tip", pEven->text());
        break;
    case 2:
        QMessageBox::about(this, "tip", pEven->text());
        break;
    case 3:
        QMessageBox::about(this, "tip", pEven->text());
        break;
    case 4:
        QMessageBox::about(this, "tip", pEven->text());
        break;
    case 5:
        QMessageBox::about(this, "tip", pEven->text());
        break;
    case 6:
        QMessageBox::about(this, "tip", pEven->text());
        break;
    default:
        break;
    }
}

4.運行結果如下所示:

 


免責聲明!

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



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