Allow QgsVectorFileWriter to report approx progress

This commit is contained in:
Nyall Dawson 2017-02-12 11:24:14 +10:00
parent 8182ec2d3d
commit c42f1ec7f5
2 changed files with 17 additions and 0 deletions

View File

@ -2424,6 +2424,9 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer* layer,
writer->mFields = layer->fields();
// write all features
long saved = 0;
long total = options.onlySelectedFeatures ? layer->selectedFeatureCount() : layer->featureCount();
int lastProgressReport = 0;
while ( fit.nextFeature( fet ) )
{
if ( options.feedback && options.feedback->isCanceled() )
@ -2432,6 +2435,18 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer* layer,
return Canceled;
}
saved++;
if ( options.feedback )
{
//avoid spamming progress reports
int newProgress = ( 100.0 * saved ) / total;
if ( newProgress < 100 && newProgress != lastProgressReport )
{
lastProgressReport = newProgress;
options.feedback->setProgress( lastProgressReport );
}
}
if ( shallTransform )
{
try

View File

@ -44,6 +44,8 @@ bool QgsVectorFileWriterTask::run()
if ( !mLayer )
return false;
connect( mOptions.feedback, &QgsFeedback::progressChanged, this, &QgsVectorFileWriterTask::setProgress );
mError = QgsVectorFileWriter::writeAsVectorFormat(
mLayer, mDestFileName, mOptions, &mNewFilename, &mErrorMessage );
return mError == QgsVectorFileWriter::NoError;