我的项目是实现一个像 Word 这样的文本编辑器。除了使用鼠标调整图像大小(如 Word 2016)之外,一切都很好,我如何在 QTextEdit 中检测图像,如何选择它然后用鼠标调整它的大小。我检查了在 stackoverflow 中发布的示例,该示例使用 qdialog 调整图像大小,但我需要使用鼠标来完成。请问有什么想法吗?
有四种渲染方式QTextEdit
。
1.QImageFormat
这是最标准的方式QTextEdit
。重要的是QTextCursor
处理。2.QTextObjectInterface
这是第二种方式,但非常有用。
3.QGraphicsPixmapItem
你必须提前导入QGraphicsView
&QGraphicsScene
但它QTextBlock
不受限制。非常活泼和自由。
4.QPainter drawImage
本来是为非交互方式的,我在这个答案中没有使用它。
我推荐(1 或 2)和 3 组合。
当鼠标点击
1.您在QTextEdit
.
2.您单击图像。
3.光标必须移动到图像之前或之后。
4.也就是说,光标位置必须在图像之前或之后。
5-我认为您可以通过 QTextCursor 处理来捕获图像格式。
5-b.如果使用QTextObjectInterface
,则可以捕获“\ufffc”字符。
6Imageformat
属于一个字符,因此您可以通过movePosition
带KeepAnchor
标志的方法来选择和捕捉图像QTextCursor
。
7-1 您可以抓住cursorRect
并获得 上的位置QTextEdit
。您可以使用 cursorRect 的位置,以及图像的宽度和高度。您可以使用它们指定图像。
然后,您调用 QGraphicsItems。你打电话QGraphicsScene.addItem()
这是准确计算矩形位置的最重要的事情。您决定标准位置并制作八个 rectitem 位置的枢纽。
10.您在QGraphicsRectItem
子类中定义控制计算。你可能想知道计算方式...
这可能是全局对象,因为它们是临时使用的。
鼠标移动时
11.大约,我解释一下。
我认为您将鼠标光标向左移动,图像向右扩展。
好像是MicroSoft Word里一样的控件,总之你可能想不到高度的变化。不用说,你一定不要改变8个rect的项目大小。
这可能是一个技巧,QGraphicsRectItem.setCursor(QtCore.Qt.PointingHandCursor)
很有帮助。
而且我认为变化的比率是+1 或-1 是最好的。它并不复杂,也很容易理解,至少一开始是这样。我建议您不要匹配鼠标光标的移动。最终,用户将难以协调图像的大小。
你更新宽度和高度QGraphicsRectItem
。你setWidth
与setHeight
同时进行。
这是非常重要的。您在同一位置一遍又一遍地删除并重新插入图像。它似乎被用户自动放大或缩小。但图像会立即被删除和添加。当然,您必须重新插入更大或更小的图像。您必须在同一位置重新插入。所以你安装setKeepPositionOnInsert(True)
和插入后,`setKeepPositionOnInsert(False)'可能很重要。因为插入后,位置会在插入文本的后面。
后
15.如果您结束操作图像,则从场景中移除矩形。
16.我忘了说,installEventFilter
移动鼠标和连接效果到rectItem可能需要它。但是如果rectItems是全局的,你可以在QTextEdit
,mouseEvent处理中调用它们。
ps 如果你不明白我说的话,请不要犹豫,通过评论问我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句