Вышеприведенное является довольно распространенным требованием, но его не так просто реализовать в Qt. Кадр изменения размера изображения внутри QTextEdit - сложная часть. Я использую другой подход. Я рисую виджет поверх QTextEdit в виде круглой резинки вокруг изображения. Для этого я сделал следующее:
Я реализовал другой виджет (унаследованный от QWidget), который рисует себя как рамка из пунктирной линии. Когда предоставлен правильный размер, он будет рисовать себя как выделение круглой резинки вокруг изображения и предоставит вам новый размер изображения, как только пользователь закончит изменение размера круглой резинки. Конечно, вы можете изменить размер изображения и во время изменения размера резиновой ленты, если вы используете виртуальную функцию resizeEvent (...) виджета с резиновой лентой и излучаете свой собственный сигнал. Как родитель для виджета с резинкой, установите QTextEdi-> viewport (), чтобы получить правильную позицию видового экрана вашего виджета с резинкой.
Создайте другой класс (MyTextEditDecorator), который просто наследуется от QObject, и установите себя в качестве фильтра событий для QTextEdit и окна просмотра QTextEdit. Это также обеспечит хорошую изоляцию функциональности резиновой ленты от остального кода, который у вас уже может быть. Внутри функции MyTextEditDecorator :: eventFilter (...) перехватывается события MouseButtonPress, MouseButtonRelease, Paint и Resize. Показать виджет с резинкой, когда пользователь щелкает в пределах изображения или границы изображения, т.е. когда формат курсора - QTextImageFormat, и скрывать его, когда текстовый курсор находится за пределами формата изображения.
Если вы хотите, чтобы выделение с резинкой появлялось, когда пользователь перемещает текстовый курсор, например, с помощью клавиатуры, вам может потребоваться подключиться к QTextEdit :: cursorPositionChanged (). Для моих целей мне также понадобились сигналы currentCharFormatChanged () и textChanged () в тех случаях, когда вводится текст и вновь создается формат изображения. Вам также понадобится найти положение изображения x, y в области просмотра, чтобы правильно разместить виджет с резинкой вокруг изображения. Я использую QTextEdit :: cursorRect (imageSelectedCursor). Если вы поддерживаете различные выравнивания изображения, будьте готовы к тому, чтобы настроить его. Еще одна полезная функция для поиска позиций экрана X, Y - это QTextLayout :: lineForTextPosition (textCursor.position ()) для получения правильных QTextLine и QTextLine :: rect ().
Чтобы изменить размер изображения с помощью резиновой ленты, нужно приложить немало усилий и прочитать приведенное выше в качестве руководства. Я реализовал это лично, и он работает в профессиональном приложении для редактирования текста. Извините, что не разместил полное решение здесь. Это долго и имеет авторское право. Надеюсь, что вышеприведенное руководство кому-нибудь поможет. Я протестировал несколько решений, но это единственное решение, которое обеспечивает полное и инкапсулированное изменение размера резинки изображения редактора без вмешательства в код QTextEdit и внутренние компоненты библиотеки Qt.