我需要在QwtPlot绘图区域(而不是整个小部件!)上单击鼠标的x和y坐标。问题是每个事件都只调用方法bool event(QEvent*)
。我找到了一些解决方案(http://www.qtcentre.org/archive/index.php/t-9502.html),使用QwtPlotPicker,但这对我不起作用,我使用Qwt 6并且没有像setSelectionState()
这样的方法。
在QwtPlot中,在绘图区域实现鼠标点击事件的其他方法是什么?
答案 0 :(得分:0)
与5相比,Qwt 6发生了一些变化。
现在我们需要使用QwtPlotPicker::setStateMachine(QwtPickerMachine)
方法设置状态机。有几个选项(派生类):
QwtPickerClickPointMachine
QwtPickerClickRectMachine
QwtPickerDragPointMachine
QwtPickerDragRectMachine
QwtPickerPolygonMachine
QwtPickerTrackerMachine
取决于我们的需求。
接下来,我们需要做的是来自connect()
的{{1}}信号selected(...)
和我们的自定义广告位,我们可以获取x和y坐标或其他有趣的数据。
答案 1 :(得分:0)
我在QwtPlotCanvas的子类中使用鼠标事件方法捕获鼠标事件,并使用QwtPlot中的转换方法将鼠标事件x和y坐标映射到它们在图中表示的值。
创建QwtPlotCanvas的子类并覆盖mousePressEvent方法。
void SpecialMapPlotCanvas::mousePressEvent (QMouseEvent* event) {
QWidget::mousePressEvent (event);
double x = plot() -> invTransform (plot() -> xBottom, event -> pos().x());
double y = plot() -> invTransform (plot() -> yLeft, event -> pos().y());
std::cout << "Values " << x << " " << y << "\n";
}
然后通过实例化该类的对象并将其传递给QwtPlot :: setCanvas,在QwtPlot上设置画布。然后,SpecialMapPlotCanvas :: plot()为您提供对拥有QwtPlot的引用,其invTransform方法可用于将点击坐标转换为绘图值。如果您在QwtPlot本身上使用鼠标事件,则会得到错误的答案,因为此处的鼠标事件坐标与整个QwtPlot小部件区域(如您所说)相关,而不仅仅是画布。