QwtPlot鼠标点击事件
QwtPlot mouse click event
我需要得到鼠标点击QwtPlot绘图区域(不是整个小部件!)的x和y坐标。问题是只有方法bool event(QEvent*)
在每个事件上被调用。我找到了一些解决方案(http://www.qtcentre.org/archive/index.php/t-9502.html),使用QwtPlotPicker,但这对我不起作用,我使用Qwt 6,没有像setSelectionState()
这样的方法。
在QwtPlot中实现绘图区域上的鼠标单击事件的其他方法是什么?
与Qwt 5相比,Qwt 6有一些变化。
现在我们需要使用QwtPlotPicker::setStateMachine(QwtPickerMachine)
方法设置状态机。有几个选项(派生类):
-
QwtPickerClickPointMachine
-
QwtPickerClickRectMachine
-
QwtPickerDragPointMachine
-
QwtPickerDragRectMachine
-
QwtPickerPolygonMachine
-
QwtPickerTrackerMachine
取决于我们的需要。
接下来我们需要做的是connect()
用我们的自定义槽从QwtPlotPicker
信号selected(...)
,我们可以获得x和y坐标或其他有趣的数据。
我使用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小部件区域(如您所说)相关,而不仅仅是画布。
- 跟踪滚动条上的鼠标事件
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- 我在QChartView中找不到缩放图形的鼠标滚轮滚动事件
- Qt应用程序不响应鼠标和键盘事件
- Qt将鼠标移动事件转移到新窗口
- Qt-如何在Qt3DWindow上获取鼠标事件
- Qt:如何防止为平板电脑事件生成鼠标事件
- 如何使用 c++ mfc 在屏幕上获取鼠标事件
- WM_PAINT和鼠标事件.MFC/WIN32 API.
- 如何解决:自定义QGraphics项目接收鼠标新闻事件坐标延迟/滞后?
- 覆盖Qt的鼠标按下事件中断移动事件参数
- Qt 如何使用鼠标移动事件移动视图
- 触发鼠标按下事件,但不触发鼠标移动事件
- 通过鼠标事件传递数据
- 鼠标区域窃取QQuickItem的鼠标事件
- 跟踪鼠标输入事件
- Windows Console API鼠标事件只是进入选择模式
- 无法跟踪鼠标事件 OpenCV
- Qt. 忽略小部件中的任何鼠标事件,而不是另一个小部件
- WXWIDGETS将鼠标事件连接到WXPAINTDC上的形状对象以删除