Russian Qt Forum
Ноябрь 22, 2024, 10:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextEdit (загрузка множества изображений 256x256)  (Прочитано 1280 раз)
Dubas
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« : Декабрь 01, 2022, 17:54 »

Использую связку QListWidget + QTextEdit для ведения записей (аля записная книжка).
QListWidget - являет собой список названий страниц (дата, событие и т.п), с подгрузкой редактируемого содержимого в QTextEdit.
Захотелось разнообразить свои записи средствами HTML - форматирование текста (bold, italic...), и добавление картинок\фоток.
Столкнулся с тем, что при одновременной загрузке более 70+ фотографий с телефона (в виджете скалируется до 256x256) часть из них не загрузилась, отображаясь дефолтной иконкой.
Тем временем в диспетчере задач Windows память процесса подскочила до 1 ГБ+.

Код:
//Вариант добавление картинки №1:
txtEdit->append("<a href=\"" + fileNames[i] +  "\"><img src=\"" + fileNames[i] + "\" width=\"" + QString::number(ui->spinBox_Width->value()) + "\" height=\"" + QString::number(ui->spinBox_Height->value()) + "\"></a>");

//Вариант добавление картинки №2: (оба варианта забивают память и не отображают все загруженные картинки, если их более 70 шт.)
QString file = fileNames[i];
QUrl Uri ( QString ( "file://%1" ).arg ( file ) );
QImage image = QImageReader ( file ).read();
QTextDocument * textDocument = ptr->txtEdit->document();
textDocument->addResource( QTextDocument::ImageResource, Uri, QVariant ( image ) );
QTextCursor cursor = ptr->txtEdit->textCursor();
QTextImageFormat imageFormat;
imageFormat.setWidth( 256 ); //image.width()
imageFormat.setHeight( 256 ); //image.height()
imageFormat.setName( Uri.toString() );
cursor.insertImage(imageFormat);

Вопрос №1:
Средствами QTextEdit или QTextBrowser возможно добиться стабильной работы с множеством картинок?

Вопрос №2:
При очищении содержимого QTextEdit память процесса не очищается. Как очищать кэш картинок? Можно было бы ограничится только 30 шт. одновременных картинок в виджете, но в данном случае новые картинки уже не добавляются, отображаясь дефолтной иконкой.
« Последнее редактирование: Декабрь 01, 2022, 18:00 от Dubas » Записан
Dubas
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« Ответ #1 : Декабрь 03, 2022, 20:59 »

Решение нашлось! Просто скалируем добавляемые фотки и кэшируем для ускорения последующих отрисовок.

Код:
QImage image = QImageReader ( file ).read().scaled(256, 256);
« Последнее редактирование: Декабрь 04, 2022, 17:54 от Dubas » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.165 секунд. Запросов: 22.