Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Dubas от Декабрь 01, 2022, 17:54



Название: QTextEdit (загрузка множества изображений 256x256)
Отправлено: Dubas от Декабрь 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 шт. одновременных картинок в виджете, но в данном случае новые картинки уже не добавляются, отображаясь дефолтной иконкой.


Название: Re: QTextEdit (загрузка множества изображений 256x256)
Отправлено: Dubas от Декабрь 03, 2022, 20:59
Решение нашлось! Просто скалируем добавляемые фотки и кэшируем для ускорения последующих отрисовок.

Код:
QImage image = QImageReader ( file ).read().scaled(256, 256);