新建一個窗口程序,然后創建一個QMenu對象。在構造函數里初始化
menu = new QMenu("menu", this); //menu在頭文件聲明
QAction *action = new QAction(tr("1111"), this); //為使目錄較大,能看見,我們添加一個action
menu->addAction(action);

然后在mousePressEvent里看到效果
void Dialog::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::RightButton) //鼠標右鍵。避免無法關掉窗口
    {
        QPoint p(0, 0);
        //menu->exec(p); //測試用,坐標相對於桌面
        menu->exec(e->globalPos()); //坐標相對於窗口
        //menu->exec(e->pos()); //坐標相對於桌面
    }
}

可以看到,pos不管窗口怎樣移動,menu總是出現在相同的地方。globalPos相對於窗口,跟着窗口移動.

pos不管窗口怎樣移動,menu總是出現在相同的地方。
假設我們一直點擊的是窗口右上角,menu總是出現在同樣的地方。也就是類似於執行menu->exec(QPoint(1000,0))
所以p的值沒變,但相對於桌面我們點的地方已經變了,只是相對窗口的坐標p一直是(1000,0),所以pos是相對窗口的。。。
globalPos相對於窗口,跟着窗口移動。不論我點哪菜單就在哪show,所以是相對桌面的,要不叫global呢~~