Существует четыре способа рендеринга в 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".
6 Imageformat
принадлежит одному символу, поэтому вы можете выбрать и поймать изображение поmovePosition
метод с флагом KeepAnchor
в QTextCursor
.
Заранее вы готовите QGraphics Engine.
7-1 Вы можете поймать cursorRect
и получить позицию на QTextEdit
.Вы можете использовать положение курсора, ширину и высоту изображения.Вы можете указать изображение, используя их.
и затем вы вызываете QGraphicsItems.Вы звоните QGraphicsScene.addItem()
вы готовите восемь QGraphicsRectItem для работы с мышью
и один QGraphicsRectItem для изображения.
Это самая важная вещь для точного расчетапрямоугольные позиции.Вы определяете стандартную позицию и делаете концентратор из восьми позиций прямолинейности.
10. Вы определяете контрольный расчет в QGraphicsRectItem
Подкласс.Вы, вероятно, хотите знать способ расчета ...
Это может быть глобальный объект, потому что они используются во времени.
Когда мышь перемещается
11. Приблизительно, я объясняю это.
Если вы щелкнете мышью по левому прямоугольнику, ![enter image description here](https://i.stack.imgur.com/EYavv.png)
Я думаю, что вы переместите курсор мыши влево,изображение расширяется вправо.
Похоже, что тот же элемент управления в MicroSoft Word. Одним словом, вы не можете думать об изменении высоты. Разумеется, вы не должны изменять восемь прямоугольных элементов.размер.
Это может быть уловка, QGraphicsRectItem.setCursor(QtCore.Qt.PointingHandCursor)
полезен.
И я думаю, что соотношение изменений равно +1 или -1 - лучшее.Это не сложно и очень понятно, по крайней мере, на первый взгляд.Я рекомендую вам не соответствовать движению курсора мыши.В конце концов, пользователям будет сложно согласовать размер изображений.
Вы обновляете ширину и высоту QGraphicsRectItem
.и вы setWidth
& setHeight
одновременно.
Это очень важно .Вы удаляете и повторно вставляете изображение снова и снова в той же позиции.Похоже, пользователи автоматически увеличивают или уменьшают его. Но изображение мгновенно удаляется и добавляется.Конечно, вы должны заново вставить изображение большего или меньшего размера.Вы должны повторно установить в той же позиции.Таким образом, вы устанавливаете setKeepPositionOnInsert(True)
и после вставки может быть важно `setKeepPositionOnInsert (False) '. Поскольку после вставки позиция будет находиться сзади вставленного текста.
После
15.Если вы заканчиваете манипулировать изображением, вы удаляете реты из сцены.
16. Я забыл сказать, что, вероятно, installEventFilter
необходимо для перемещениямышь и подключение эффектов к rectItem. Но если rectItems глобальные, вы можете вызвать их в QTextEdit
, mouseEvent Handling.
ps Если вы не поняли, что я сказал, пожалуйста, не стесняйтесьспросить меня по комментарию.