@@ -243,48 +243,49 @@ void QgsMergeAttributesDialog::refreshMergedValue( int col )
243
243
244
244
// evaluate behaviour (feature value or min / max / mean )
245
245
QString mergeBehaviourString = comboBox->currentText ();
246
- QString evalText ; // text that has to be inserted into merge result field
246
+ QVariant mergeResult ; // result to show in the merge result field
247
247
if ( mergeBehaviourString == tr ( " Minimum" ) )
248
248
{
249
- evalText = minimumAttributeString ( col );
249
+ mergeResult = minimumAttribute ( col );
250
250
}
251
251
else if ( mergeBehaviourString == tr ( " Maximum" ) )
252
252
{
253
- evalText = maximumAttributeString ( col );
253
+ mergeResult = maximumAttribute ( col );
254
254
}
255
255
else if ( mergeBehaviourString == tr ( " Mean" ) )
256
256
{
257
- evalText = meanAttributeString ( col );
257
+ mergeResult = meanAttribute ( col );
258
258
}
259
259
else if ( mergeBehaviourString == tr ( " Median" ) )
260
260
{
261
- evalText = medianAttributeString ( col );
261
+ mergeResult = medianAttribute ( col );
262
262
}
263
263
else if ( mergeBehaviourString == tr ( " Sum" ) )
264
264
{
265
- evalText = sumAttributeString ( col );
265
+ mergeResult = sumAttribute ( col );
266
266
}
267
267
else if ( mergeBehaviourString == tr ( " Concatenation" ) )
268
268
{
269
- evalText = concatenationAttributeString ( col );
269
+ mergeResult = concatenationAttribute ( col );
270
270
}
271
271
else if ( mergeBehaviourString == tr ( " Skip attribute" ) )
272
272
{
273
- evalText = tr ( " Skipped" );
273
+ mergeResult = tr ( " Skipped" );
274
274
}
275
275
else // an existing feature value
276
276
{
277
277
int featureId = mergeBehaviourString.split ( " " ).at ( 1 ).toInt (); // probably not very robust for translations...
278
- evalText = featureAttributeString ( featureId, col );
278
+ mergeResult = featureAttribute ( featureId, col );
279
279
}
280
280
281
281
// insert string into table widget
282
- QTableWidgetItem* newTotalItem = new QTableWidgetItem ( evalText );
282
+ QTableWidgetItem* newTotalItem = new QTableWidgetItem ();
283
+ newTotalItem->setData ( Qt::DisplayRole, mergeResult );
283
284
newTotalItem->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
284
285
mTableWidget ->setItem ( mTableWidget ->rowCount () - 1 , col, newTotalItem );
285
286
}
286
287
287
- QString QgsMergeAttributesDialog::featureAttributeString ( int featureId, int col )
288
+ QVariant QgsMergeAttributesDialog::featureAttribute ( int featureId, int col )
288
289
{
289
290
int idx = mTableWidget ->horizontalHeaderItem ( col )->data ( Qt::UserRole ).toInt ();
290
291
@@ -296,15 +297,15 @@ QString QgsMergeAttributesDialog::featureAttributeString( int featureId, int col
296
297
if ( i < mFeatureList .size () &&
297
298
QgsAttributeEditor::retrieveValue ( mTableWidget ->cellWidget ( i + 1 , col ), mVectorLayer , idx, value ) )
298
299
{
299
- return value. toString () ;
300
+ return value;
300
301
}
301
302
else
302
303
{
303
- return " " ;
304
+ return QVariant ( mVectorLayer -> pendingFields ()[col]. type () ) ;
304
305
}
305
306
}
306
307
307
- QString QgsMergeAttributesDialog::minimumAttributeString ( int col )
308
+ QVariant QgsMergeAttributesDialog::minimumAttribute ( int col )
308
309
{
309
310
double minimumValue = std::numeric_limits<double >::max ();
310
311
double currentValue;
@@ -329,10 +330,10 @@ QString QgsMergeAttributesDialog::minimumAttributeString( int col )
329
330
return QString ();
330
331
}
331
332
332
- return QString::number ( minimumValue, ' f ' );
333
+ return QVariant ( minimumValue );
333
334
}
334
335
335
- QString QgsMergeAttributesDialog::maximumAttributeString ( int col )
336
+ QVariant QgsMergeAttributesDialog::maximumAttribute ( int col )
336
337
{
337
338
double maximumValue = -std::numeric_limits<double >::max ();
338
339
double currentValue;
@@ -354,13 +355,13 @@ QString QgsMergeAttributesDialog::maximumAttributeString( int col )
354
355
355
356
if ( numberOfConsideredFeatures < 1 )
356
357
{
357
- return QString ( );
358
+ return QVariant ( mVectorLayer -> pendingFields ()[col]. type () );
358
359
}
359
360
360
- return QString::number ( maximumValue, ' f ' );
361
+ return QVariant ( maximumValue );
361
362
}
362
363
363
- QString QgsMergeAttributesDialog::meanAttributeString ( int col )
364
+ QVariant QgsMergeAttributesDialog::meanAttribute ( int col )
364
365
{
365
366
int numberOfConsideredFeatures = 0 ;
366
367
double currentValue;
@@ -377,10 +378,10 @@ QString QgsMergeAttributesDialog::meanAttributeString( int col )
377
378
}
378
379
}
379
380
double mean = sum / numberOfConsideredFeatures;
380
- return QString::number ( mean, ' f ' );
381
+ return QVariant ( mean );
381
382
}
382
383
383
- QString QgsMergeAttributesDialog::medianAttributeString ( int col )
384
+ QVariant QgsMergeAttributesDialog::medianAttribute ( int col )
384
385
{
385
386
// bring all values into a list and sort
386
387
QList<double > valueList;
@@ -409,10 +410,10 @@ QString QgsMergeAttributesDialog::medianAttributeString( int col )
409
410
{
410
411
medianValue = valueList[( size + 1 ) / 2 - 1 ];
411
412
}
412
- return QString::number ( medianValue, ' f ' );
413
+ return QVariant ( medianValue );
413
414
}
414
415
415
- QString QgsMergeAttributesDialog::sumAttributeString ( int col )
416
+ QVariant QgsMergeAttributesDialog::sumAttribute ( int col )
416
417
{
417
418
double sum = 0.0 ;
418
419
bool conversion = false ;
@@ -425,10 +426,10 @@ QString QgsMergeAttributesDialog::sumAttributeString( int col )
425
426
sum += currentValue;
426
427
}
427
428
}
428
- return QString::number ( sum, ' f ' );
429
+ return QVariant ( sum );
429
430
}
430
431
431
- QString QgsMergeAttributesDialog::concatenationAttributeString ( int col )
432
+ QVariant QgsMergeAttributesDialog::concatenationAttribute ( int col )
432
433
{
433
434
QStringList concatString;
434
435
for ( int i = 0 ; i < mFeatureList .size (); ++i )
@@ -562,6 +563,8 @@ QgsAttributes QgsMergeAttributesDialog::mergedAttributes() const
562
563
return QgsAttributes ();
563
564
}
564
565
566
+ QgsFields fields = mVectorLayer ->pendingFields ();
567
+
565
568
QgsAttributes results ( mTableWidget ->columnCount () );
566
569
for ( int i = 0 ; i < mTableWidget ->columnCount (); i++ )
567
570
{
@@ -577,7 +580,8 @@ QgsAttributes QgsMergeAttributesDialog::mergedAttributes() const
577
580
578
581
if ( idx >= results.count () )
579
582
results.resize ( idx + 1 ); // make sure the results vector is long enough (maybe not necessary)
580
- results[idx] = currentItem->text ();
583
+
584
+ results[idx] = currentItem->data ( Qt::DisplayRole );
581
585
}
582
586
583
587
return results;
0 commit comments