显示自定义图像并能够捕捉鼠标输入

Display custom image and have the ability to catch mouse input

本文关键字:鼠标 输入 自定义 图像 显示      更新时间:2023-10-16

我正在尝试在主窗口中显示多个图像,并能够在这些图像接收到mousePressEvent时执行某些操作。

为此,我想我会创建一个新的类,从QWidget派生而来,它有一个QImage私人成员。这样,我就可以覆盖paintEvent和mousePressEvent来显示图像和捕捉鼠标输入。

然而,问题是,在MainWindow中绘制的图像具有小部件的大小及其形式(矩形),并且图像不具有相同的形式(甚至不是常规形式)。这会导致一些问题,因为我能够在不属于我的图像但属于Widget区域的部分捕获mousePressEvent。

有人对如何解决这个问题有什么想法吗?我还是QT的新手,所以请不要介意任何重大错误:)


更新: 好的,我尝试了另一种方法。

我现在在我的主窗口上有一个graphicView,上面链接了一个graphicScene。在这个场景中,我添加了一些graphicItems。

为了实现我的图形项目,我不得不重载boundingRect和paint方法。就文档而言,我的理解是QT使用shape方法(调用boundingRect)来确定要绘制的对象的形状。这可能是我的问题的解决方案,或者至少是提高绘制形状准确性的一种解决方案。

到目前为止,我正在返回一个正方形,其图像大小为boundingRect。有人知道我如何将形状"调整"为我的图像(类似圆柱体)吗?

如果您想使用QWidget,您应该了解掩码概念,以优化图像所占用的空间(注意此实现的性能)。

如果您决定使用QGraphicsItems,您可以重新实现虚拟方法QPainterPath QGraphicsItem::shape () const,以返回一条路径,尽可能地表示图像的边界。

Qt文件中写道:

该形状用于许多事情,包括碰撞检测、命中测试以及QGraphicsScene::items()函数。

我鼓励你使用QGraphics系统,这听起来更适合你的情况。

我所理解的是,您希望收缩/扩展/变换图像以适应自定义表单(如圆柱体)。我建议使用OpenGL模块QGLWidget,并将矩形图像的每个坐标(0,0)(0,1)(1,0)(1,1)映射到OpenGL中创建的自定义表单。

它将充当纹理贴图。

编辑:您仍然可以在OpenGL 中捕捉鼠标输入