gpt4 book ai didi

c++ - cairo 上下文中的鼠标事件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:42 25 4
gpt4 key购买 nike

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

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

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

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

    <

此应用程序是使用 GTK2 用 C 语言编写的,使用 gnomecanvas 绘制圆圈,以简单的方式向每个圆圈添加信号;现在我将此应用程序移动到 C++ 和 GTK3 以更新它。

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

谢谢你的帮助:)

最佳答案

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

如果您在使用 goocanvasmm 文档时遇到问题,请查看 documentation for GooCanvas' C API结合 C API 如何转换为 C++ 的知识通常就足够了。虽然GooCanvasmm documentation对我来说似乎相当广泛。

关于c++ - cairo 上下文中的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17360447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com