我有一个复杂的Qt GUI,其中GUI的一部分显示带有各种数据点的图。
当前左右点击图表时,它会返回点击位置的x-y值。我的工作是更新这个,以便左键单击仍然执行相同的操作,但右键单击选择最近的数据点并打开上下文菜单允许我删除所述数据点。我们的想法是手动删除异常值。
更新:我认为我找到了当前负责返回x-y值的代码段:
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();
}
就像我说的,我需要将其转换为左键单击执行相同的操作,然后右键单击打开上下文菜单。任何建议都将不胜感激。
答案 0 :(得分:1)
您必须检查使用了哪个鼠标按钮。通常我更喜欢处理mouseReleaseEvent
而不是mousePressEvent
,因为它更好地复制了传统的鼠标行为。但这两件事都有效。一个例子:
void mouseReleaseEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton) // Left button...
{
// Do something related to the left button
}
else if (e->button() == Qt::RightButton) // Right button...
{
// Do something related to the right button
}
}
如果您愿意,也可以处理Qt::MidButton
。