C++ 如何根据Qt中的图形形状,仅使按钮的一部分对用户操作(单击/hower/etc)作出反应?
这个问题有点难解释,但我会试试看 我有一个按钮的图像: 我也有一些它的动画,比如(带有单个循环的gif,重新加载它以查看动画!): 还有,我有一种模式: 那么,现在的问题是:当鼠标位于图案的黑色部分时,如何使按钮做出反应(例如单击/显示/等等),并且当鼠标超出该图案的范围时,如何禁止此类反应?当然,不用修改图形文件。当然,模式本身应该是隐形的 我想借助C++和QT.< /P>来实现这一点。C++ 如何根据Qt中的图形形状,仅使按钮的一部分对用户操作(单击/hower/etc)作出反应?,c++,qt,user-interface,C++,Qt,User Interface,这个问题有点难解释,但我会试试看 我有一个按钮的图像: 我也有一些它的动画,比如(带有单个循环的gif,重新加载它以查看动画!): 还有,我有一种模式: 那么,现在的问题是:当鼠标位于图案的黑色部分时,如何使按钮做出反应(例如单击/显示/等等),并且当鼠标超出该图案的范围时,如何禁止此类反应?当然,不用修改图形文件。当然,模式本身应该是隐形的 我想借助C++和QT.< /P>来实现这一点。 请至少告诉我路径,我应该寻找哪些Qt函数/类!因为现在我完全迷路了。有一个简单的方法可以做到这一点:
请至少告诉我路径,我应该寻找哪些Qt函数/类!因为现在我完全迷路了。有一个简单的方法可以做到这一点: 屏蔽小部件仅在其可见部分接收鼠标事件 但是,这也会遮罩图形,因此您可能需要尝试其他布线:
我还建议使用多边形遮罩(通过QPolygon)而不是位遮罩和containsPoint(…)来确定遮罩区域内是否发生鼠标事件。根据我的经验,这样做不那么痛苦,也很容易调试:您可以添加代码在图形上绘制多边形,当您满意不再需要时删除该代码。有一种简单的方法可以做到这一点: 屏蔽小部件仅在其可见部分接收鼠标事件 但是,这也会遮罩图形,因此您可能需要尝试其他布线:
我还建议使用多边形遮罩(通过QPolygon)而不是位遮罩和containsPoint(…)来确定遮罩区域内是否发生鼠标事件。根据我的经验,这样做不那么痛苦,也很容易调试:您可以添加代码在图形上绘制多边形,当您满意不再需要时删除该代码。我可以考虑这样做的一种方法是,通过调用
void QObject::installEventFilter,在特定按钮上安装事件过滤器(QObject*FilterObject)
按钮的方法。可以找到文档
归根结底,它是基于二进制图像创建一个专门用于过滤鼠标事件的QObject。您所要做的就是覆盖bool QObject::eventFilter(QObject*watched,QEvent*event)
方法,然后将该对象安装为按钮的筛选器。作为此筛选器类的构造函数的一部分,将对二进制图像的引用传递给它。此二进制图像引用将作为筛选器对象中的成员变量,我们可以使用它来决定按钮的哪些像素响应鼠标事件
在eventFilter
方法中:
- 检查事件类型,如果它不是鼠标事件,不要自己处理该事件,将其传递给父类
- 如果它是一个,那么你是在做生意
- 使用相应的方法
和x()
y()
- 查看存储为成员变量的二进制图像。如果此时二进制图像为
,则执行一项操作,否则执行其他操作true
希望这有帮助。我可以想到的一种方法是,通过调用按钮的
void QObject::installEventFilter(QObject*filterObj)
方法,在特定按钮上安装事件过滤器。可以找到文档
归根结底,它是基于二进制图像创建一个专门用于过滤鼠标事件的QObject。您所要做的就是覆盖bool QObject::eventFilter(QObject*watched,QEvent*event)
方法,然后将该对象安装为按钮的筛选器。作为此筛选器类的构造函数的一部分,将对二进制图像的引用传递给它。此二进制图像引用将作为筛选器对象中的成员变量,我们可以使用它来决定按钮的哪些像素响应鼠标事件
在eventFilter
方法中:
- 检查事件类型,如果它不是鼠标事件,不要自己处理该事件,将其传递给父类
- 如果它是一个,那么你是在做生意
- 使用相应的方法
和x()
y()
- 查看存储为成员变量的二进制图像。如果此时二进制图像为
,则执行一项操作,否则执行其他操作true
希望这能有所帮助。我忘记了细节,但在Qt中,你可以使用一个掩码来选择要触摸的图像的“活动”部分。不过,你必须进入图像层。我忘记了细节,但在Qt中,你可以使用一个掩码来选择图像的“活动”部分触摸。你必须进入图像层的东西,但是。你能吗