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

时间:2019-02-04 15:27:00

标签: image resize qt5 qtextedit

我的项目是实现像Word这样的文本编辑器。 除了使用鼠标调整图像大小外,其他所有操作都正常(例如Word 2016) 我如何在QTextEdit中检测图像,如何选择它,然后用鼠标调整其大小。 我检查了在stackoverflow上发布的示例,该示例使用qdialog调整图像大小,但我需要使用鼠标进行操作。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

QTextEdit中有四种渲染方式。

1。QImageFormat   这是QTextEdit中最标准的方式。重要的是QTextCursor处理。 2。QTextObjectInterface   这是第二种方法,但非常有用。
3。QGraphicsPixmapItem   您必须预先导入QGraphicsViewQGraphicsScene,但不受QTextBlock的限制。这是非常灵活和自由的。

4。QPainter drawImage   它最初是用于非交互方式的。我不在此答案中使用它。

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

单击鼠标时

1。您在QTextEdit上渲染图像。

2。单击图像。

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

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

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

5-b。如果使用QTextObjectInterface,则可以捕获“ \ ufffc”字符。

6 Imageformat属于一个字符,因此您可以使用movePosition中带有KeepAnchor标志的QTextCursor方法选择并捕获图像。

  1. 预先准备QGraphics Engine。

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

,然后调用QGraphicsItems。您致电QGraphicsScene.addItem()

  1. 您为鼠标处理enter image description here准备了八个QGraphicsRectItem,为图像准备了一个QGraphicsRectItem。

  2. 这是准确计算矩形位置的最重要的事情。 您确定标准位置,并使轮毂处于八个直肠位置。

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

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

鼠标移动时

11。我来解释一下。

如果您点击左侧的矩形,enter image description here

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

在MicroSoft Word中似乎是相同的控件。总之,您可能不会考虑高度的变化。不用说,您一定不能更改八个矩形项目的大小。

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

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

  1. 您更新了QGraphicsRectItem的宽度和高度。 并且您同时setWidthsetHeight

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

之后

15。如果结束处理图像,则从场景中删除矩形。

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

p.s。如果您听不懂我说的话,请随时通过评论询问我。