我的项目是实现像Word这样的文本编辑器。 除了使用鼠标调整图像大小外,其他所有操作都正常(例如Word 2016) 我如何在QTextEdit中检测图像,如何选择它,然后用鼠标调整其大小。 我检查了在stackoverflow上发布的示例,该示例使用qdialog调整图像大小,但我需要使用鼠标进行操作。 有什么想法吗?
答案 0 :(得分:1)
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”字符。
6 Imageformat
属于一个字符,因此您可以使用movePosition
中带有KeepAnchor
标志的QTextCursor
方法选择并捕获图像。
7-1您可以抓住cursorRect
并在QTextEdit
上获得位置。
您可以使用cursorRect的位置以及图像的宽度和高度。
您可以使用它们来指定图像。
,然后调用QGraphicsItems。您致电QGraphicsScene.addItem()
10。您可以在QGraphicsRectItem
子类中定义控制计算。
您可能想知道计算方式...
这可能是全局对象,因为它们是暂时使用的。
鼠标移动时
11。我来解释一下。
我认为您将鼠标光标向左移动,图像向右扩展。
在MicroSoft Word中似乎是相同的控件。总之,您可能不会考虑高度的变化。不用说,您一定不能更改八个矩形项目的大小。
这可能是一个技巧,QGraphicsRectItem.setCursor(QtCore.Qt.PointingHandCursor)
很有帮助。
我认为变化的比率是+1或-1是最好的。 至少在一开始,它并不复杂且非常容易理解。 我建议您不要匹配鼠标光标的移动。 最终,很难协调用户的图像大小。
您更新了QGraphicsRectItem
的宽度和高度。
并且您同时setWidth
和setHeight
。
这非常重要。您可以在同一位置一次又一次删除并重新插入图像。
用户似乎会自动将其放大或缩小。但是图像会立即删除并添加。
当然,您必须重新插入更大或更小的图像。
您必须在相同位置重新插入。因此,您安装了setKeepPositionOnInsert(True)
插入后,`setKeepPositionOnInsert(False)'可能很重要。由于插入后,位置将位于插入文本的后面。
之后
15。如果结束处理图像,则从场景中删除矩形。
16。我忘了说了,移动鼠标并将效果连接到rectItem可能需要installEventFilter
。但是如果rectItems是全局的,则可以在QTextEdit
中调用它们,mouseEvent处理
p.s。如果您听不懂我说的话,请随时通过评论询问我。