我正在考虑使用QMenu
来回应用户点击QLabel
。所以我试过了:
menu.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
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);
但它不起作用。哪里我错了?
答案 0 :(得分:3)
试试这样:
menu.h
print ("~ On Hand: " + str(onhand))
menu.cpp
#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
这是你的标签:
#include "menu.h"
Menu::Menu(QWidget *parent) :
QMenu(parent)
{
addAction("Action1");
}
Menu::showMenu(const QPoint &pos)
{
exec(mapToGlobal(pos));
}
答案 1 :(得分:0)
首先,QWidget :: customContextMenuRequested()和QWidget :: activateWindow()具有不同的签名,即它们的参数不匹配。
其次,使用QMenu :: exec()或QMenu :: popup()方法显示QMenu而不是activateWindow()。