3

我正在使用 C++ 和 GTK3 开发一个应用程序,但我被困住了。我创建了一个带有 glade 的可视化应用程序,它有三列,其中一列,中间的一列,是一个 DrawingArea。在那个 DrawingArea 中,我想在按下按钮后在我想要的点上画一些圆圈,并在这些圆圈上有不同的鼠标事件(如拖放、双击、右键单击......)。我按照官方文档做了第一件事(按下按钮后画一个圆圈) ,但问题是我不知道如何做鼠标事件,但我想了想,我有一些不同的解决方案(我不知道它们是最好的解决方案还是有更好的解决方案):

  1. 我认为最好的方法是为 cairomm 上下文创建一个信号,但我没有看到任何可以这样做的东西。也许方法是创建一个开罗表面或类似的东西。

  2. 每次单击创建一个圆圈时,我都必须创建一个 gtk 小部件,我可以在其中处理鼠标事件。这里的问题是小部件需要具有圆形形状并且需要可绘制。是否可以创建一个圆形绘图区?这可能是最好的。我在这里看到了创建自定义小部件的方法。

  3. 使用 goocanvasmm。这里的问题是 goocanvasmm 有一些文档(很抱歉,由于我的声誉,我不能发布两个以上的链接)而且我认为这不是最好的解决方案,我更喜欢使用 cairomm。

这个应用程序是使用 GTK2 用 C 语言编写的,圆圈是使用 gnomecanvas 绘制的,以一种简单的方式向每个圆圈添加信号;现在我正在将此应用程序移至 C++ 和 GTK3 以对其进行更新。

我对 GTK(以及一般的图形界面)非常陌生,但我花了几个小时寻找解决方案,但我不知道继续我的工作的最佳方法是什么。

谢谢您的帮助 :)

4

1 回答 1

1

最好为此使用画布库,例如 GooCanvas。单独使用 cairo 将需要您在整个绘图区域上监听鼠标事件,并跟踪圆圈的位置以确定鼠标事件属于哪个圆圈 - 正是画布库已经解决的问题你。

如果您在使用 goocanvasmm 文档时遇到问题,请查看GooCanvas 的 C API 文档以及了解 C API如何转换为 C++ 的知识通常就足够了。尽管GooCanvasmm 文档对我来说似乎相当广泛。

于 2013-07-06T05:20:54.407 回答