cairo上下文上的鼠标事件
Mouse events on a cairo context
我正在用C++和GTK3开发一个应用程序,但我被卡住了。我用glade创建了一个可视化应用程序,它有三列,其中一列,中间一列,是DrawingArea。在DrawingArea中,我想在按下按钮后在我想要的点上画一些圆圈,并在这些圆圈上有不同的鼠标事件(如拖放、双击、右键单击…)。我已经根据官方文档做了第一件事(按下按钮后画一个圆圈),但问题是我不知道如何做鼠标事件,但我想了想,我有一些不同的解决方案(我不知道它们是最好的解决方案还是更好的):
-
我认为最好的方法是创建一个到cairomm上下文的信号,但我没有看到任何方法。也许方法是创建一个开罗表面或类似的东西。
-
每次我点击创建一个圆圈时,我都必须创建一个gtk小部件,在其中我可以处理鼠标事件。这里的问题是小部件需要具有圆形,并且需要是可绘制的。是否可以创建一个圆形绘图区域?这可能是最好的。我在这里看到了创建自定义小部件的方法。
-
使用goocanvasmm。这里的问题是,goocanvasmm有一些文档(很抱歉,由于我的声誉,我不能发布两个以上的链接),我认为这不是最好的解决方案,我更喜欢使用cairomm。
这个应用程序是用GTK2用C编写的,圆圈是用gnomecanvas绘制的,以一种简单的方式将信号添加到每个圆圈中;现在我将这个应用程序转移到C++和GTK3来更新它
我对GTK(以及一般的图形界面)很陌生,但我找了几个小时的解决方案,我不知道什么是继续工作的最佳方式。
感谢您的帮助:)
最好使用画布库,例如GooCanvas。单独使用cairo执行此操作需要您在整个绘图区域中侦听鼠标事件,并跟踪圆圈的位置,以便决定鼠标事件属于哪个圆圈——这正是画布库已经为您解决的问题。
如果您在使用goocanvasmm文档时遇到问题,请查看GooCanvas的C API文档,并结合C API如何转换为C++的知识,通常就足够了。尽管GooCanvasmm文档对我来说似乎相当广泛。
- 跟踪滚动条上的鼠标事件
- Qt-如何在Qt3DWindow上获取鼠标事件
- Qt:如何防止为平板电脑事件生成鼠标事件
- 如何使用 c++ mfc 在屏幕上获取鼠标事件
- WM_PAINT和鼠标事件.MFC/WIN32 API.
- 通过鼠标事件传递数据
- 鼠标区域窃取QQuickItem的鼠标事件
- Windows Console API鼠标事件只是进入选择模式
- 无法跟踪鼠标事件 OpenCV
- Qt. 忽略小部件中的任何鼠标事件,而不是另一个小部件
- WXWIDGETS将鼠标事件连接到WXPAINTDC上的形状对象以删除
- Qt/Qml - 触发 QApplication/QQmlApplicationEngine 事件(键和鼠标事件)
- Juce 鼠标事件不起作用
- 是否可以捕获全局鼠标事件
- 单击QCHART图的轴时捕获鼠标事件
- OpenCV 鼠标事件始终在鼠标滚动时接收事件 10 和 *flag* 0
- 鼠标事件选取器打开场景图
- 将鼠标事件发送到虚拟现实OpenGL场景中的QtQuick窗口
- 处理鼠标事件SFML
- 是否可以在 wxFrame 中捕获鼠标事件