Если вы хотите отображать контекстное меню при каждом нажатии метки (любой кнопкой мыши), я думаю, вам придется реализовать свой собственный класс Label
, унаследовав QLabel
и обрабатывая всплывающее меню самостоятельно случай события мыши.
Вот очень упрощенная (но работающая) версия:
class Label : public QLabel
{
public:
Label(QWidget* pParent=0, Qt::WindowFlags f=0) : QLabel(pParent, f) {};
Label(const QString& text, QWidget* pParent = 0, Qt::WindowFlags f = 0) : QLabel(text, pParent, f){};
protected :
virtual void mouseReleaseEvent ( QMouseEvent * ev ) {
QMenu MyMenu(this);
MyMenu.addActions(this->actions());
MyMenu.exec(ev->globalPos());
}
};
Этот специализированный класс Label
отобразит во всплывающем меню все добавленные к нему действия.
Допустим, главное окно вашего приложения называется MainFrm
и отображает метку (label
. Вот как будет выглядеть конструктор:
MainFrm::MainFrm(QWidget *parent) : MainFrm(parent), ui(new Ui::MainFrm)
{
ui->setupUi(this);
QAction* pAction1 = new QAction("foo", ui->label);
QAction* pAction2 = new QAction("bar", ui->label);
QAction* pAction3 = new QAction("test", ui->label);
ui->label->addAction(pAction1);
ui->label->addAction(pAction2);
ui->label->addAction(pAction3);
connect(pAction1, SIGNAL(triggered()), this, SLOT(onAction1()));
connect(pAction2, SIGNAL(triggered()), this, SLOT(onAction2()));
connect(pAction3, SIGNAL(triggered()), this, SLOT(onAction3()));
}