c++ - 显示 QMenu 以响应在 QLabel 中右键单击,可能吗?

标签 c++ qt c++11 qt4 qt5

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

菜单.h

#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

菜单.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);

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

最佳答案

尝试这样:

菜单.h

#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

菜单.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)));

关于c++ - 显示 QMenu 以响应在 QLabel 中右键单击,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35964208/

相关文章:

c++ - 我需要在 Qt 中使用 CryptoPP DLL 吗?

c++ - 限制可变参数模板参数包中的参数数量

c++ - 为什么不能将 std::stol 转换为 std::function 对象?

C++ - 你应该用一个常规数组来调整大小吗?

c++ - 实例化模板函数时出现奇怪的错误

c++ - 在成员函数上启动线程时不希望的析构函数调用

c++ - 在类定义之外定义 static const

c++ - cppcheck 为 "Redundant code: Found a statement that begins with numeric constant"语句报告 'using'

c++ - QVariant.toXXX 函数的函数指针

c++ - Qt中浮点的强制点而不是逗号