qt用鼠标在Qtextedit中调整图像大小

qt resize image in Qtextedit with the mouse

我的项目是实现像 Word 这样的文本编辑器。 除了用鼠标调整图像大小(如 Word 2016)外,一切正常 我如何检测 QTextEdit 中的图像,如何 select 它然后用鼠标调整它的大小。 我检查了 Whosebug 中发布的示例,它使用 qdialog 来调整图像大小,但我需要用鼠标来完成。 有什么想法吗?

QTextEdit中有四种渲染方式。

1.QImageFormat 这是QTextEdit中最标准的方式。重要的是 QTextCursor 处理。 2.QTextObjectInterface 这是第二种方法,但很有用。
3.QGraphicsPixmapItem 需要提前Import QGraphicsView & QGraphicsScene 但不受QTextBlock的约束,非常活泼自由

4.QPainter drawImage 它最初用于非交互式 way.I 不要在此答案中使用它。

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

鼠标点击时

1.You 在 QTextEdit 上渲染图像。

2.You 点击图片。

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

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

5-a.I 认为您可以通过 QTextCursor 处理来捕获图像格式。

5-b.If你用QTextObjectInterface,你可以抓到"\ufffc"字符。

6个Imageformat属于一个字符,所以可以select用movePosition方法抓取图像,在QTextCursor中有KeepAnchor标志。

  1. 事先准备好QGraphics Engine。

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

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

  1. 您准备了八个用于鼠标处理的 QGraphicsRectItem 和一个用于图像的 QGraphicsRectItem。

  2. 这是准确计算矩形位置的最重要的事情。 您决定标准位置并使八个直列位置成为中心。

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

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

鼠标移动时

11.Approximately,我解释一下

如果鼠标点击左边的矩形,

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

好像是MicroSoft中的同一个控件Word.In一句话,你可能想不到height.Needless说的改变,你一定不要改变8个rect item size。

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

而且我觉得变化的比例是+1或者-1是最好的。 它并不复杂,也很容易理解,至少一开始是这样。 我建议你不要匹配鼠标光标的移动。 最终,用户将很难协调图像的大小。

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

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

之后

15.If 你结束了对图像的处理,你从场景中移除了矩形。

16.I 忘了说了,可能需要installEventFilter来移动鼠标和连接效果到rectItem.But 如果rectItems是全局的,你可以在QTextEdit、鼠标事件处理。

p.s。如果你听不懂我说的话,请不要犹豫,通过评论问我。