Qt:在指定区域显示右键弹出菜单

方法:重写QWidget提供的方法contextMenuEvent(QContextMenuEvent *event)



 
  

样例:

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle(tr("Context Menu Show 2"));
    setContextMenuPolicy(Qt::DefaultContextMenu); //其实不用设置,默认就是这个值
}

void MyWidget::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu *menu = new QMenu(this);
    menu->addAction(new QAction(tr("&Open"), menu));
    menu->addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), menu));
    menu->addAction(new QAction(tr("&Quit"), menu));
    menu->move(cursor().pos()); //让菜单显示的位置在鼠标的坐标上
    menu->show();
}


 
  

拓展:判断焦点位置,设置右键菜单的显示位置。

void Demo::contextMenuEvent(QContextMenuEvent *)
{
    if(m_TableWidget->hasFocus())
    {
        m_Menu->move(cursor().pos());
        m_Menu->show();
    }
}

你可能感兴趣的:(Qt编程)