Qt之右键弹出菜单

时间:2022-10-01 17:00:55

Qt中右键菜单的实现主要是通过QContextMenuEvent事件来实现的,如果想要实现自定义的菜单,我们只需要重写该事件!由于该事件为QWidget的一个虚方法,所以继承至QWidget的部件都可以是用该事件来定义自己的右键弹出菜单。

我们接下来实现一个普通的右键菜单:

void Widget::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu *menu = new QMenu();
    QAction *minimized = new QAction("最小化");
    QAction *maximized = new QAction("最大化");
    QAction *close = new QAction("关闭");

    menu->addAction(minimized);
    menu->addAction(maximized);
    menu->addAction(close);

    connect(minimized,SIGNAL(triggered(bool)),this,SLOT(showMinimized()));
    connect(maximized,SIGNAL(triggered(bool)),this,SLOT(showMaximized()));
    connect(close,SIGNAL(triggered(bool)),this,SLOT(close()));

    menu->exec(QCursor::pos());
}

接下来我们实现一个更为自定义化的弹出菜单:

void Widget::contextMenuEvent(QContextMenuEvent *event)
{
    QWidget *w = new QWidget(this);
    //指示该窗口是一个弹出窗口
    w->setWindowFlags(Qt::flags|Qt::Popup);

    QPushButton *btn = new QPushButton(w);
    btn->setText("Button");

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(btn);
    w->setLayout(layout);
    w->setFixedWidth(200);
    w->show();

    connect(btn,SIGNAL(clicked(bool)),this,SLOT(close()));

    const QPoint gpt = event->globalPos();
    w->move(gpt);
}

看懂了么???是不是很简单,以上的示例只是一个抛砖引玉的作用,想实现什么样的菜单是不是感觉很方便了呢!

有木有觉得Qt想要实现什么样的效果是不是so easy!!!