rightclick event dans Qt pour ouvrir un menu contextuel
J'ai un segment de code qui appelle une mousePressEvent. J'ai le clic gauche de la sortie, les coordonnées du curseur, et j'ai droit de faire de même, mais je veux aussi avoir le clic droit ouvre un menu contextuel. Le code que j'ai pour l'instant est:
void plotspace::mousePressEvent(QMouseEvent*event)
{
double trange = _timeonright - _timeonleft;
int twidth = width();
double tinterval = trange/twidth;
int xclicked = event->x();
_xvaluecoordinate = _timeonleft+tinterval*xclicked;
double fmax = Data.plane(X,0).max();
double fmin = Data.plane(X,0).min();
double fmargin = (fmax-fmin)/40;
int fheight = height();
double finterval = ((fmax-fmin)+4*fmargin)/fheight;
int yclicked = event->y();
_yvaluecoordinate = (fmax+fmargin)-finterval*yclicked;
cout<<"Time(s): "<<_xvaluecoordinate<<endl;
cout<<"Flux: "<<_yvaluecoordinate<<endl;
cout << "timeonleft= " << _timeonleft << "\n";
returncoordinates();
emit updateCoordinates();
if (event->button()==Qt::RightButton)
{
contextmenu->setContextMenuPolicy(Qt::CustomContextMenu);
connect(contextmenu, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(ShowContextMenu(const QPoint&)));
void A::ShowContextMenu(const QPoint &pos)
{
QMenu *menu = new QMenu;
menu->addAction(tr("Remove Data Point"), this,
SLOT(test_slot()));
menu->exec(w->mapToGlobal(pos));
}
}
}
Je sais que mon problème est très fondamental dans la nature, et que, "contextmenu" n'est pas déclaré correctement. J'ai reconstitué ce code à partir de nombreuses sources, et ne savez pas comment déclarer quelque chose en c++. Tout conseil serait grandement apprécié.
source d'informationauteur ahle6481
Vous devez vous connecter pour publier un commentaire.
customContextMenuRequested
est émis lorsque le widget est contextMenuPolicy estQt::CustomContextMenu
et l'utilisateur a demandé un menu contextuel sur le widget. Donc dans le constructeur de votre widget, vous pouvez appelersetContextMenuPolicy
et connectercustomContextMenuRequested
à une fente pour se faire un menu contextuel personnalisé.Dans le constructeur de
plotspace
:ShowContextMenu
logement doit être un membre de la classe deplotspace
comme :