Изменение размера изображения в Qtextedit с помощью мыши - PullRequest
0 голосов
/ 04 февраля 2019

Мой проект заключается в реализации текстового редактора, такого как Word.Все отлично работает, за исключением изменения размера изображения с помощью мыши (например, Word 2016). Как я могу обнаружить изображение в QTextEdit, как выбрать его, а затем изменить его размер с помощью мыши.Я проверил пример, размещенный в stackoverflow, который использует qdialog для изменения размера изображений, но мне нужно сделать это с помощью мыши.Любая идея, пожалуйста?

1 Ответ

0 голосов
/ 10 февраля 2019

Существует четыре способа рендеринга в 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 для работы с мышью enter image description here и один QGraphicsRectItem для изображения.

Это самая важная вещь для точного расчетапрямоугольные позиции.Вы определяете стандартную позицию и делаете концентратор из восьми позиций прямолинейности.

10. Вы определяете контрольный расчет в QGraphicsRectItem Подкласс.Вы, вероятно, хотите знать способ расчета ...

Это может быть глобальный объект, потому что они используются во времени.

Когда мышь перемещается

11. Приблизительно, я объясняю это.

Если вы щелкнете мышью по левому прямоугольнику, enter image description here

Я думаю, что вы переместите курсор мыши влево,изображение расширяется вправо.

Похоже, что тот же элемент управления в 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 Если вы не поняли, что я сказал, пожалуйста, не стесняйтесьспросить меня по комментарию.

...