我正在考虑显示QMenu以响应用户单击QLabel。所以我尝试了:

菜单

#ifndef MENU_H
#define MENU_H

#include <QMenu>

class Menu : public QMenu
{
    Q_OBJECT
public:
    explicit Menu(QWidget *parent = 0);

signals:

public slots:
};

#endif // MENU_H

menu.cpp
#include "menu.h"

Menu::Menu(QWidget *parent) :
    QMenu(parent)
{
    addAction("Action1");
}

可以调用的代码显示菜单:
QLabel *label = new QLabel("...");
m_menu = new Menu;
label->setContextMenuPolicy(Qt::CustomContextMenu);
connect(label, &QLabel::customContextMenuRequested, m_menu, &Menu::activateWindow);

但这不起作用。我哪里错了?

最佳答案

尝试这样:

菜单

#ifndef MENU_H
#define MENU_H

#include <QMenu>

class Menu : public QMenu
{
    Q_OBJECT
public:
    explicit Menu(QWidget *parent = 0);

signals:

public slots:
void showMenu(const QPoint &pos);
};

#endif // MENU_H

menu.cpp
#include "menu.h"

Menu::Menu(QWidget *parent) :
    QMenu(parent)
{
    addAction("Action1");
}
Menu::showMenu(const QPoint &pos)
{
    exec(mapToGlobal(pos));
}

这是您的标签:
QLabel *label = new QLabel("...");
m_menu = new Menu;
label->setContextMenuPolicy(Qt::CustomContextMenu);
connect(label, SIGNAL(customContextMenuRequested(QPoint)), m_menu, SLOT(showMenu(QPoint)));

10-04 15:04
查看更多