2012-06-25 3 views
3

У меня есть большое изображение, которое необходимо сохранить с помощью image.save(fichier). Как я могу отобразить панель прогресса состояния сохранения?Прогресс во время сохранения файла

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

ответ

1

Вы, вероятно, не может с помощью встроенного в изображение сохранения. Вы можете оценить время сохранения (знать размер изображения, догадываться mb/s) и установить индикатор выполнения и просто использовать таймер для его обновления.

Или у вас может быть индикатор выполнения, который быстро запускается до конца и перезапускается, чтобы показать какую-то активность, но не фактический прогресс.

Редактировать: если вы действительно должны иметь прогресс, вы можете «сохранить» данные изображения в памяти, а затем записать память на диск в блок, обновляя прогресс.

QImage image; 
QByteArray bytes; 
QBuffer buffer(&bytes); 
buffer.open(QIODevice::WriteOnly); 
image.save(&buffer, "PNG"); // writes image into buffer in PNG format 

Затем записать буфер на диск

+0

Проблема в том, что программа будет работать на самых разных машинах, поэтому я бы предпочел не делать никаких предположений, кроме того, я до сих пор не вижу, как это реализовать. Как я могу обновить что-либо во время выполнения инструкции 'image.save (fichier)'? – Leo

+0

Сигнал таймера/слот все равно будет выполняться во время задачи сохранения. Таймеры - это дешевый и простой способ сделать многозадачность. Вы также можете проверить размер файла изображения в слоте таймера, но в зависимости от ОС он может выделить полный размер в начале сохранения, а затем заполнить его –

1

Вы можете работать в другом потоке QImage::save(), в то время как основной поток показывает прогрессбар, обновляя его значение прогресса каждый вторым с expected_size/current_size. Вы можете получить текущий размер с QFile::size()

+0

У меня есть только один вопрос относительно этого решения, как я могу получить ожидаемое размер файла? Все, что я знаю, это количество пикселей, но я не знаю, как перевести это на несколько укусов, особенно с фактором качества ... – Leo

Смежные вопросы