显示 QMenu 以响应右击 QLabel,可能吗?
Show a QMenu in response to right click in a QLabel, possible?
我正在考虑显示 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);
但它不起作用。我哪里错了?
首先,QWidget::customContextMenuRequested() 和 QWidget::activateWindow() 具有不同的签名,即它们的参数不匹配。
其次,使用 QMenu::exec() 或 QMenu::popup() 方法而不是 activateWindow() 显示 QMenu。
像这样尝试:
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:
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)));
我正在考虑显示 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);
但它不起作用。我哪里错了?
首先,QWidget::customContextMenuRequested() 和 QWidget::activateWindow() 具有不同的签名,即它们的参数不匹配。
其次,使用 QMenu::exec() 或 QMenu::popup() 方法而不是 activateWindow() 显示 QMenu。
像这样尝试:
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:
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)));