首页 > 解决方案 > qt用鼠标在Qtextedit中调整图像大小

问题描述

我的项目是实现一个像 Word 这样的文本编辑器。除了用鼠标调整图像大小(如 Word 2016)之外,一切都很好我如何在 QTextEdit 中检测图像,如何选择它然后用鼠标调整它的大小。我检查了在 stackoverflow 中发布的示例,该示例使用 qdialog 来调整图像大小,但我需要用鼠标来完成。请问有什么想法吗?

标签: imageresizeqt5qtextedit

解决方案


有四种渲染方式QTextEdit

1.QImageFormat 这是最标准的方式QTextEdit。重要的是QTextCursor处理。2.QTextObjectInterface 这是第二种方式,但非常有用。
3.QGraphicsPixmapItem 你必须提前导入QGraphicsView&QGraphicsScene但不受约束。QTextBlock它非常活泼和自由。

4.QPainter drawImage 本来是为了非交互的方式。我在这个答案中不使用它。

我推荐(1 或 2)和 3 组合。

当鼠标点击

1.您在QTextEdit.

2.点击图片。

3.光标必须移动到图像之前或之后。

4.也就是说,光标位置必须在图像之前或之后。

5-a我认为你可以通过 QTextCursor 处理来捕捉图像格式。

5-b.如果你使用QTextObjectInterface,你可以捕捉到“\ufffc”字符。

6Imageformat属于一个字符,因此您可以通过movePosition带有KeepAnchor标志的方法选择和捕获图像QTextCursor

  1. 提前准备好 QGraphics 引擎。

7-1 你可以抓住cursorRect并获得 上的位置QTextEdit。您可以使用 cursorRect 的位置,以及图像的宽度和高度。您可以使用它们指定图像。

然后,您调用 QGraphicsItems。你打电话QGraphicsScene.addItem()

  1. 你准备了八个用于鼠标处理在此处输入图像描述的 QGraphicsRectItem 和一个用于图像的 QGraphicsRectItem。

  2. 这是准确计算矩形位置的最重要的事情。您确定标准位置并制作八直项位置的中心。

10.您在子类中定义控制计算QGraphicsRectItem。您可能想知道计算方式...

这可能是全局对象,因为它们是临时使用的。

当鼠标移动

11.大概,我解释一下。

如果你用鼠标点击左边的rectitem,在此处输入图像描述

我认为您将鼠标光标向左移动,图像正在向右扩展。

好像是MicroSoft Word中的同一个控件。总之,你可能不会想到高度的变化。不用说,你一定不能改变八个rect项的大小。

这可能是一个技巧,QGraphicsRectItem.setCursor(QtCore.Qt.PointingHandCursor)很有帮助。

我认为变化的比率是+1或-1是最好的。至少,起初它并不复杂,也很容易理解。我建议您不要匹配鼠标光标的移动。最终,用户将难以协调图像的大小。

  1. 你更新宽度和高度QGraphicsRectItem。而你setWidth&setHeight同时。

  2. 这是非常重要的。您在同一位置一次又一次地删除并重新插入图像。用户似乎会自动变大或变小。但图像会立即删除并添加。当然,您必须重新插入更大或更小的图像。您必须在同一位置重新插入。所以你安装setKeepPositionOnInsert(True) ,插入后,`setKeepPositionOnInsert(False)' 可能很重要。因为插入后,位置会在插入文本的后面。

15.如果您结束对图像的操作,则从场景中删除矩形。

16.我忘了说,installEventFilter移动鼠标和连接效果到rectItem可能需要它。但是如果rectItems是全局的,你可以在QTextEdit,mouseEvent处理中调用它们。

ps如果你不明白我说的,请不要犹豫,通过评论问我。


推荐阅读