跟踪光标 C++

Posted

技术标签:

【中文标题】跟踪光标 C++【英文标题】:Tracking cursor C++ 【发布时间】:2010-11-27 19:49:00 【问题描述】:

我目前正在研究一个类,该类将在调用时根据给定参数创建 x,y 图表,但我还想要当光标悬停在 x,y 图表上时对 x,y 图表中每个点的描述。

例如,如果我生成一个显示市场增长(年份、金额、比率)的图表,并且我将鼠标悬停在某个点上,我希望出现一个小框,其中会显示有关该点的详细信息,例如年份,股票、股票价格、图表中的位置等。我已经完成了图表生成器,但现在我需要这部分的帮助。

如何在 C++ 中实现这一点?

注意——我使用的是 Ubuntu。

另一个注意事项 --- 我创建的图表没有图形库,也没有任何图形函数。如果您一开始不理解我的问题,我基本上是在问两件事:1. 如何使用外部图形库对我的非图形图形实现光标跟踪,以及 2. 如果不可能,我应该使用哪个库创建图表以及如何使用它们进行光标跟踪?

抱歉,这只是我第一次使用图形。我更像是一个“没有外部库”的程序员

谢谢。

【问题讨论】:

了解您使用的图形库会很有帮助 您使用哪个工具包? gtkmm?吗?普通的 Xlib(颤抖)?完全不同的东西? 我的图表不是图形的。我忘了补充我的问题,这是一个双重问题。一,我是否可以在不使用图形库制作我的图形然后使用图形库进行跟踪的情况下实现光标跟踪,以及(2)如果不可能,哪个图形库适合创建图形,以及如何使用它来跟踪光标。编辑了问题。谢谢。 完全不使用外部库没有任何意义。除非您正在进行某种非常低级的嵌入式开发,否则您将设法在普通 X11 显示器上打开一个窗口。你的窗户是怎么打开的?无论您使用什么,都可能还具有获取鼠标事件的能力。它必须是一个有点图形的图形,人们才能将鼠标光标悬停在其中的某个点上。 【参考方案1】:

我会选择 Qt,因为有一个基于 Qt 的名为 Qwt 的第三方库,它提供了很多技术小部件,包括绘图小部件(您可能还对 qtcentre 上的 Qwt dedicated sub-forum 感兴趣)。

“txt-box on hover”效果的解决方法其实很简单,只需要通过QWidget::setToolTip( const QString& )为节点部件设置tooltip即可。

【讨论】:

【参考方案2】:

您需要维护图表中的对象列表,然后对光标悬停的每个坐标进行“命中测试”。这个命中测试基本上需要遍历您的列表,看看当前坐标是否落在该元素的图形上的对象上。

【讨论】:

显然这是我需要做的,这里没有考虑。我的问题是如何做到这一点。 好吧,当您绘制对象时,它们将具有特定的已知位置和特定的非零大小。您需要做的就是将这些与当前坐标相关联。例如,如果对象是一个半径为5的圆,位于(14, 24),则需要查看sqrt((14 - x) ** 2 + (24 - y) ** 2)是否小于等于5,如果是则显示信息。 非常有帮助,谢谢。我肯定会选择这样的解决方案,而不是包含外部库。但是,我知道获取光标位置的唯一方法仅适用于 Windows(GetCursorPos),而我正在使用 Ubuntu。关于如何在 Linux 上获取光标位置的任何想法? 恐怕我还没有真正在 Linux 中做过太多的图形编程,但我会问我用的是什么工具包。【参考方案3】:

如果您通过控制台创建图表,我认为该控制台无论如何都不会知道您的鼠标在哪里。在 Java 等语言中可以找到的许多图形功能在 C++ 中并不存在,因为 C++ 的创建者希望这些图形库功能强大,而不是可移植。我支持QT 的推荐,尽管我从未亲自使用过它。这是我在其他地方看到的最推荐的图书馆。

【讨论】:

以上是关于跟踪光标 C++的主要内容,如果未能解决你的问题,请参考以下文章

即使光标移出影片后仍继续跟踪鼠标拖动事件

c++语言如何隐藏光标,要详细的注释,不能让人看不懂!

c++ X11全局改变光标形状

如何获得鼠标光标图标VS C++

XCode 是不是有类似 Visual Studio 的光标导航堆栈?

如果传递给 QGraphicsRectItem Qt c++,则更改光标