C++ 文件保存期间的进度

C++ 文件保存期间的进度,c++,file,qt,progress-bar,save,C++,File,Qt,Progress Bar,Save,我有一个大图像,我必须用image.save(fichier)保存它。我怎么可能显示保存状态的进度条 这可能是一个很小的问题,但我真的不知道如何做到这一点,因为这是一个单行命令…您可能无法使用内置的图像保存。 您可以估计节省的时间(知道图像的大小,猜测mb/s),并设置一个进度条,只需使用计时器进行更新 或者您可以有一个进度条,它可以快速运行到最后并重新启动以显示某些活动,但不显示实际进度 QImage image; QByteArray bytes; QBuffer buffer(&am

我有一个大图像,我必须用
image.save(fichier)
保存它。我怎么可能显示保存状态的进度条


这可能是一个很小的问题,但我真的不知道如何做到这一点,因为这是一个单行命令…

您可能无法使用内置的图像保存。 您可以估计节省的时间(知道图像的大小,猜测mb/s),并设置一个进度条,只需使用计时器进行更新

或者您可以有一个进度条,它可以快速运行到最后并重新启动以显示某些活动,但不显示实际进度

 QImage image;
 QByteArray bytes;
 QBuffer buffer(&bytes);
 buffer.open(QIODevice::WriteOnly);
 image.save(&buffer, "PNG"); // writes image into buffer in PNG format
编辑:如果您确实必须有一个进度,您可以将图像数据“保存”到内存中,然后将内存写入磁盘,每次更新进度

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

然后将缓冲区写入磁盘

您可以在另一个线程中运行
QImage::save()
,同时主线程显示progressbar,以预期大小/当前大小每秒更新其进度值。您可以通过
QFile::size()

获得当前大小。问题是程序将在非常不同的机器上运行,因此我不想做任何猜测,而且我仍然不知道如何实现这一点。执行
image.save(fichier)
语句时,如何更新任何内容?在执行保存任务时,计时器信号/插槽仍将执行。定时器是一种廉价且简单的多任务处理方式。您也可以检查计时器插槽中的图像文件大小-但根据操作系统的不同,它可能会在保存开始时分配完整大小,然后填充。关于此解决方案,我只有一个问题,如何获得预期的文件大小?我只知道像素的数量,但我不知道如何将其转化为比特数,尤其是质量因子。。。