QWidget菜单策略:Qt::ContextMenuPolicy

1、Qt::NoContextMenu:小部件没有上下文菜单,上下文菜单处理被推迟到小部件的父级。

2、Qt::PreventContextMenu:小部件没有上下文菜单,与NoContextMenu相比,处理不会延迟到小部件的父级。这意味着所有鼠标右键事件都可以传递到小部件本身。

3、Qt::DefaultContextMenu:调用小部件的QWidget::contextMenuEvent()处理程序。

void Widget::contextMenuEvent(QContextMenuEvent *event)
{
    QAction * action1 = new QAction(tr("菜单1"),this);
    QAction * action2 = new QAction(tr("菜单2"),this);

    this->addAction(action1);
    this->addAction(action2);

    QMenu contextMenu;
    contextMenu.addAction(action1);
    contextMenu.addAction(action2);
    contextMenu.exec(QCursor::pos());
}

4、Qt::ActionsContextMenu:小部件将QWidget::actions()显示为上下文菜单。

    this->setContextMenuPolicy(Qt::ActionsContextMenu);
    QAction * action1 = new QAction(tr("菜单1"),this);
    QAction * action2 = new QAction(tr("菜单2"),this);

    this->addAction(action1);
    this->addAction(action2);

5、Qt::CustomContextMenu:小部件发出QWidget::customContextMenuRequested()信号。在连接此信号的槽中创建菜单并显示。

    this->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(this,&Widget::customContextMenuRequested,this, &Widget::slotCustomContextMenu);

void Widget::slotCustomContextMenu(const QPoint &point)
{
    QAction * action1 = new QAction(tr("菜单1"),this);
    QAction * action2 = new QAction(tr("菜单2"),this);

    this->addAction(action1);
    this->addAction(action2);

    QMenu contextMenu;
    contextMenu.addAction(action1);
    contextMenu.addAction(action2);
    contextMenu.exec(QCursor::pos());
}

猜你喜欢

转载自blog.csdn.net/kenfan1647/article/details/115074673