30
30
#include < QSettings>
31
31
#include < QSqlError>
32
32
#include < QSqlQuery>
33
- #include < QSqlTableModel>
33
+ #include < QModelIndex>
34
+ #include < QAbstractTableModel>
34
35
35
36
36
37
QgsBookmarks::QgsBookmarks ( QWidget *parent ) : QDockWidget( parent )
@@ -75,23 +76,26 @@ QgsBookmarks::QgsBookmarks( QWidget *parent ) : QDockWidget( parent )
75
76
return ;
76
77
}
77
78
78
- QSqlTableModel *model = new QSqlTableModel ( this , db );
79
- model ->setTable ( " tbl_bookmarks" );
80
- model ->setSort ( 0 , Qt::AscendingOrder );
81
- model-> setEditStrategy ( QSqlTableModel::OnFieldChange );
82
- model-> select ( );
79
+ mQgisModel = new QSqlTableModel ( this , db );
80
+ mQgisModel ->setTable ( " tbl_bookmarks" );
81
+ mQgisModel ->setSort ( 0 , Qt::AscendingOrder );
82
+ mQgisModel -> select ( );
83
+ mQgisModel -> setEditStrategy ( QSqlTableModel::OnFieldChange );
83
84
84
85
// set better headers then column names from table
85
- model ->setHeaderData ( 0 , Qt::Horizontal, tr ( " ID" ) );
86
- model ->setHeaderData ( 1 , Qt::Horizontal, tr ( " Name" ) );
87
- model ->setHeaderData ( 2 , Qt::Horizontal, tr ( " Project" ) );
88
- model ->setHeaderData ( 3 , Qt::Horizontal, tr ( " xMin" ) );
89
- model ->setHeaderData ( 4 , Qt::Horizontal, tr ( " yMin" ) );
90
- model ->setHeaderData ( 5 , Qt::Horizontal, tr ( " xMax" ) );
91
- model ->setHeaderData ( 6 , Qt::Horizontal, tr ( " yMax" ) );
92
- model ->setHeaderData ( 7 , Qt::Horizontal, tr ( " SRID" ) );
86
+ mQgisModel ->setHeaderData ( 0 , Qt::Horizontal, tr ( " ID" ) );
87
+ mQgisModel ->setHeaderData ( 1 , Qt::Horizontal, tr ( " Name" ) );
88
+ mQgisModel ->setHeaderData ( 2 , Qt::Horizontal, tr ( " Project" ) );
89
+ mQgisModel ->setHeaderData ( 3 , Qt::Horizontal, tr ( " xMin" ) );
90
+ mQgisModel ->setHeaderData ( 4 , Qt::Horizontal, tr ( " yMin" ) );
91
+ mQgisModel ->setHeaderData ( 5 , Qt::Horizontal, tr ( " xMax" ) );
92
+ mQgisModel ->setHeaderData ( 6 , Qt::Horizontal, tr ( " yMax" ) );
93
+ mQgisModel ->setHeaderData ( 7 , Qt::Horizontal, tr ( " SRID" ) );
93
94
94
- lstBookmarks->setModel ( model );
95
+ mProjectModel = new QgsProjectBookmarksTableModel ();
96
+ mModel .reset ( new QgsMergedBookmarksTableModel ( *mQgisModel , *mProjectModel , lstBookmarks ) );
97
+
98
+ lstBookmarks->setModel ( mModel .data () );
95
99
96
100
QSettings settings;
97
101
lstBookmarks->header ()->restoreState ( settings.value ( " /Windows/Bookmarks/headerstate" ).toByteArray () );
@@ -103,7 +107,8 @@ QgsBookmarks::QgsBookmarks( QWidget *parent ) : QDockWidget( parent )
103
107
104
108
QgsBookmarks::~QgsBookmarks ()
105
109
{
106
- delete lstBookmarks->model ();
110
+ delete mQgisModel ;
111
+ delete mProjectModel ;
107
112
QSqlDatabase::removeDatabase ( " bookmarks" );
108
113
saveWindowLocation ();
109
114
}
@@ -123,15 +128,15 @@ void QgsBookmarks::saveWindowLocation()
123
128
124
129
void QgsBookmarks::addClicked ()
125
130
{
126
- QSqlTableModel *model = qobject_cast<QSqlTableModel *>( lstBookmarks-> model () );
127
- Q_ASSERT ( model );
131
+ Q_ASSERT ( mModel );
132
+ Q_ASSERT ( mQgisModel );
128
133
129
134
QgsMapCanvas *canvas = QgisApp::instance ()->mapCanvas ();
130
135
Q_ASSERT ( canvas );
131
136
132
137
QSqlQuery query ( " INSERT INTO tbl_bookmarks(bookmark_id,name,project_name,xmin,ymin,xmax,ymax,projection_srid)"
133
138
" VALUES (NULL,:name,:project_name,:xmin,:xmax,:ymin,:ymax,:projection_srid)" ,
134
- model ->database () );
139
+ mQgisModel ->database () );
135
140
136
141
QString projStr ( " " );
137
142
if ( QgsProject::instance () )
@@ -156,11 +161,11 @@ void QgsBookmarks::addClicked()
156
161
query.bindValue ( " :projection_srid" , QVariant::fromValue ( canvas->mapSettings ().destinationCrs ().srsid () ) );
157
162
if ( query.exec () )
158
163
{
159
- model ->setSort ( 0 , Qt::AscendingOrder );
160
- model ->select ();
161
- lstBookmarks->scrollToBottom ( );
162
- lstBookmarks->setCurrentIndex ( model ->index ( model ->rowCount () - 1 , 1 ) );
163
- lstBookmarks->edit ( model ->index ( model ->rowCount () - 1 , 1 ) );
164
+ mQgisModel ->setSort ( 0 , Qt::AscendingOrder );
165
+ mQgisModel ->select ();
166
+ lstBookmarks->scrollTo ( mModel -> index ( mQgisModel -> rowCount () - 1 , 1 ) );
167
+ lstBookmarks->setCurrentIndex ( mModel ->index ( mQgisModel ->rowCount () - 1 , 1 ) );
168
+ lstBookmarks->edit ( mModel ->index ( mQgisModel ->rowCount () - 1 , 1 ) );
164
169
}
165
170
else
166
171
{
@@ -193,7 +198,7 @@ void QgsBookmarks::deleteClicked()
193
198
int i = 0 ;
194
199
Q_FOREACH ( int row, rows )
195
200
{
196
- lstBookmarks-> model () ->removeRow ( row - i );
201
+ mModel ->removeRow ( row - i );
197
202
i++;
198
203
}
199
204
}
@@ -265,8 +270,7 @@ void QgsBookmarks::importFromXML()
265
270
QDomElement docElem = doc.documentElement ();
266
271
QDomNodeList nodeList = docElem.elementsByTagName ( " bookmark" );
267
272
268
- QSqlTableModel *model = qobject_cast<QSqlTableModel *>( lstBookmarks->model () );
269
- Q_ASSERT ( model );
273
+ Q_ASSERT ( mModel );
270
274
271
275
QString queries;
272
276
@@ -293,7 +297,7 @@ void QgsBookmarks::importFromXML()
293
297
}
294
298
295
299
QStringList queriesList = queries.split ( ' ;' );
296
- QSqlQuery query ( model ->database () );
300
+ QSqlQuery query ( mQgisModel ->database () );
297
301
298
302
Q_FOREACH ( const QString& queryTxt, queriesList )
299
303
{
@@ -309,8 +313,8 @@ void QgsBookmarks::importFromXML()
309
313
}
310
314
query.finish ();
311
315
}
312
- model ->setSort ( 0 , Qt::AscendingOrder );
313
- model ->select ();
316
+ mQgisModel ->setSort ( 0 , Qt::AscendingOrder );
317
+ mQgisModel ->select ();
314
318
}
315
319
316
320
void QgsBookmarks::exportToXML ()
@@ -335,8 +339,8 @@ void QgsBookmarks::exportToXML()
335
339
QDomElement root = doc.createElement ( " qgis_bookmarks" );
336
340
doc.appendChild ( root );
337
341
338
- int rowCount = lstBookmarks-> model () ->rowCount ();
339
- int colCount = lstBookmarks-> model () ->columnCount ();
342
+ int rowCount = mModel ->rowCount ();
343
+ int colCount = mModel ->columnCount ();
340
344
341
345
QList<QString> headerList;
342
346
headerList << " id" << " name" << " project" << " xmin"
@@ -348,7 +352,7 @@ void QgsBookmarks::exportToXML()
348
352
root.appendChild ( bookmark );
349
353
for ( int j = 0 ; j < colCount; j++ )
350
354
{
351
- QModelIndex idx = lstBookmarks-> model () ->index ( i, j );
355
+ QModelIndex idx = mModel ->index ( i, j );
352
356
if ( idx.isValid () )
353
357
{
354
358
QString value = idx.data ( Qt::DisplayRole ).toString ();
@@ -375,3 +379,314 @@ void QgsBookmarks::exportToXML()
375
379
376
380
settings.setValue ( " /Windows/Bookmarks/LastUsedDirectory" , QFileInfo ( fileName ).path () );
377
381
}
382
+
383
+
384
+ QgsProjectBookmarksTableModel::QgsProjectBookmarksTableModel ()
385
+ {
386
+ QObject::connect (
387
+ QgisApp::instance (), SIGNAL ( projectRead () ),
388
+ this , SLOT ( projectRead () ) );
389
+ }
390
+
391
+ int QgsProjectBookmarksTableModel::rowCount ( const QModelIndex& parent ) const
392
+ {
393
+ Q_UNUSED ( parent );
394
+
395
+ return QgsProject::instance ()->readNumEntry ( " Bookmarks" , " /count" );
396
+ }
397
+
398
+ int QgsProjectBookmarksTableModel::columnCount ( const QModelIndex& parent ) const
399
+ {
400
+ Q_UNUSED ( parent );
401
+
402
+ return 8 ;
403
+ }
404
+
405
+ QVariant QgsProjectBookmarksTableModel::data ( const QModelIndex& index, int role ) const
406
+ {
407
+ Q_UNUSED ( role );
408
+ Q_ASSERT ( role == Qt::DisplayRole );
409
+
410
+ switch ( index.column () )
411
+ {
412
+ case 1 :
413
+ return QgsProject::instance ()->readEntry ( " Bookmarks" , QString ( " /Row-%1/Name" ).arg ( index.row () ) );
414
+ case 2 :
415
+ return QgsProject::instance ()->readEntry ( " Bookmarks" , QString ( " /Row-%1/Project" ).arg ( index.row () ) );
416
+ case 3 :
417
+ return QgsProject::instance ()->readDoubleEntry ( " Bookmarks" , QString ( " /Row-%1/MinX" ).arg ( index.row () ) );
418
+ case 4 :
419
+ return QgsProject::instance ()->readDoubleEntry ( " Bookmarks" , QString ( " /Row-%1/MinY" ).arg ( index.row () ) );
420
+ case 5 :
421
+ return QgsProject::instance ()->readDoubleEntry ( " Bookmarks" , QString ( " /Row-%1/MaxX" ).arg ( index.row () ) );
422
+ case 6 :
423
+ return QgsProject::instance ()->readDoubleEntry ( " Bookmarks" , QString ( " /Row-%1/MaxY" ).arg ( index.row () ) );
424
+ case 7 :
425
+ return QgsProject::instance ()->readNumEntry ( " Bookmarks" , QString ( " /Row-%1/SRID" ).arg ( index.row () ) );
426
+ default :
427
+ return QVariant ();
428
+ }
429
+ }
430
+
431
+ bool QgsProjectBookmarksTableModel::setData ( const QModelIndex& index, const QVariant& value, int role )
432
+ {
433
+ Q_UNUSED ( role );
434
+ Q_ASSERT ( role == Qt::EditRole );
435
+
436
+ switch ( index.column () )
437
+ {
438
+ case 1 :
439
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , QString ( " /Row-%1/Name" ).arg ( index.row () ), value.value <QString>() );
440
+ return true ;
441
+ case 2 :
442
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , QString ( " /Row-%1/Project" ).arg ( index.row () ), value.value <QString>() );
443
+ return true ;
444
+ case 3 :
445
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , QString ( " /Row-%1/MinX" ).arg ( index.row () ), value.toDouble () );
446
+ return true ;
447
+ case 4 :
448
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , QString ( " /Row-%1/MinY" ).arg ( index.row () ), value.toDouble () );
449
+ return true ;
450
+ case 5 :
451
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , QString ( " /Row-%1/MaxX" ).arg ( index.row () ), value.toDouble () );
452
+ return true ;
453
+ case 6 :
454
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , QString ( " /Row-%1/MaxY" ).arg ( index.row () ), value.toDouble () );
455
+ return true ;
456
+ case 7 :
457
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , QString ( " /Row-%1/SRID" ).arg ( index.row () ), value.toInt () );
458
+ return true ;
459
+ default :
460
+ return false ;
461
+ }
462
+ }
463
+
464
+ bool QgsProjectBookmarksTableModel::insertRows ( int row, int count, const QModelIndex& parent )
465
+ {
466
+ Q_UNUSED ( row );
467
+ Q_UNUSED ( parent );
468
+
469
+ return QgsProject::instance ()->writeEntry ( " Bookmarks" , " /count" , QgsProject::instance ()->readNumEntry ( " Bookmarks" , " /count" ) + count );
470
+ }
471
+
472
+ bool QgsProjectBookmarksTableModel::removeRows ( int row, int count, const QModelIndex& parent )
473
+ {
474
+ Q_UNUSED ( parent );
475
+
476
+ for ( int newRow = row ; newRow < rowCount () - count ; newRow++ )
477
+ {
478
+ for ( int column = 0 ; column < columnCount () ; column++ )
479
+ {
480
+ setData ( index ( newRow, column ), data ( index ( newRow + count, column ) ) );
481
+ }
482
+ }
483
+ for ( int newRow = rowCount () - count ; newRow < rowCount () ; newRow++ )
484
+ {
485
+ QgsProject::instance ()->removeEntry ( " Bookmarks" , QString ( " /Row-%1" ).arg ( newRow ) );
486
+ }
487
+
488
+ QgsProject::instance ()->writeEntry ( " Bookmarks" , " /count" , QgsProject::instance ()->readNumEntry ( " Bookmarks" , " /count" ) - count );
489
+
490
+ return true ;
491
+ }
492
+
493
+ QgsMergedBookmarksTableModel::QgsMergedBookmarksTableModel ( QAbstractTableModel& qgisTableModel, QAbstractTableModel& projectTableModel, QTreeView* treeView ):
494
+ mQgisTableModel( qgisTableModel ),
495
+ mProjectTableModel( projectTableModel ),
496
+ mTreeView( treeView )
497
+ {
498
+ QObject::connect (
499
+ QgisApp::instance (), SIGNAL ( projectRead () ),
500
+ this , SLOT ( projectRead () ) );
501
+
502
+ QObject::connect (
503
+ &mQgisTableModel , SIGNAL ( layoutChanged () ),
504
+ this , SLOT ( allLayoutChanged () ) );
505
+ QObject::connect (
506
+ &mQgisTableModel , SIGNAL ( dataChanged ( const QModelIndex&, const QModelIndex& ) ),
507
+ this , SLOT ( qgisDataChanged ( const QModelIndex&, const QModelIndex& ) ) );
508
+ QObject::connect (
509
+ &mQgisTableModel , SIGNAL ( rowsInserted ( const QModelIndex&, int , int ) ),
510
+ this , SLOT ( allLayoutChanged () ) );
511
+ QObject::connect (
512
+ &mQgisTableModel , SIGNAL ( rowsRemoved ( const QModelIndex&, int , int ) ),
513
+ this , SLOT ( allLayoutChanged () ) );
514
+
515
+ QObject::connect (
516
+ &projectTableModel, SIGNAL ( layoutChanged () ),
517
+ this , SLOT ( allLayoutChanged () ) );
518
+ QObject::connect (
Collapse comment Comment on line R518
@sbrunner I get these warnings:
Warning: Object::connect: No such signal QgsProjectBookmarksTableModel::projectDataChanged( const QModelIndex&, const QModelIndex& )
Warning: Object::connect: No such signal QgsProjectBookmarksTableModel::projectRowsInserted( const QModelIndex&, int, int )
Warning: Object::connect: No such signal QgsProjectBookmarksTableModel::ProjectRowsRemoved( const QModelIndex&, int, int )
Btw, you can use
instead of
QObject::connect( xxx, yyy )
And you can use
connect( this, SIGNAL( dataChanged ), that, SIGNAL( dataChanged ) );
i.e. No need for an extra qgisDataChanged
proxy slot
Code has comments. Press enter to view.
519
+ &projectTableModel, SIGNAL ( projectDataChanged ( const QModelIndex&, const QModelIndex& ) ),
520
+ this , SLOT ( dataChanged ( const QModelIndex&, const QModelIndex& ) ) );
521
+ QObject::connect (
522
+ &projectTableModel, SIGNAL ( projectRowsInserted ( const QModelIndex&, int , int ) ),
523
+ this , SLOT ( allLayoutChanged () ) );
524
+ QObject::connect (
525
+ &projectTableModel, SIGNAL ( ProjectRowsRemoved ( const QModelIndex&, int , int ) ),
526
+ this , SLOT ( allLayoutChanged () ) );
527
+ }
528
+
529
+ int QgsMergedBookmarksTableModel::rowCount ( const QModelIndex& parent ) const
530
+ {
531
+ return mQgisTableModel .rowCount ( parent ) + mProjectTableModel .rowCount ( parent );
532
+ }
533
+
534
+ int QgsMergedBookmarksTableModel::columnCount ( const QModelIndex& parent ) const
535
+ {
536
+ return mQgisTableModel .columnCount ( parent ) + 1 ;
537
+ }
538
+
539
+ QVariant QgsMergedBookmarksTableModel::data ( const QModelIndex& index, int role ) const
540
+ {
541
+ // is project or application
542
+ if ( index.column () == mQgisTableModel .columnCount () )
543
+ {
544
+ if ( role == Qt::CheckStateRole )
545
+ {
546
+ return index.row () < mQgisTableModel .rowCount () ? Qt::Unchecked : Qt::Checked;
547
+ }
548
+ else
549
+ {
550
+ return QVariant ();
551
+ }
552
+ }
553
+ if ( index.row () < mQgisTableModel .rowCount () )
554
+ {
555
+ return mQgisTableModel .data ( index, role );
556
+ }
557
+ else
558
+ {
559
+ if ( role == Qt::DisplayRole || role == Qt::EditRole )
560
+ {
561
+ return mProjectTableModel .data ( this ->index ( index.row () - mQgisTableModel .rowCount (), index.column () ), role );
562
+ }
563
+ else
564
+ {
565
+ return mQgisTableModel .data ( this ->index ( 0 , index.column () ), role );
566
+ }
567
+ }
568
+ }
569
+
570
+ bool QgsMergedBookmarksTableModel::setData ( const QModelIndex& index, const QVariant& value, int role )
571
+ {
572
+ // is project or QGIS
573
+ if ( index.column () == mQgisTableModel .columnCount () )
574
+ {
575
+ if ( index.row () < mQgisTableModel .rowCount () )
576
+ {
577
+ moveBookmark ( mQgisTableModel , mProjectTableModel , index.row () );
578
+ mTreeView ->scrollTo ( this ->index ( rowCount () - 1 , 1 ) );
579
+ mTreeView ->setCurrentIndex ( this ->index ( rowCount () - 1 , 1 ) );
580
+ mTreeView ->selectionModel ()->select ( this ->index ( rowCount () - 1 , 1 ), QItemSelectionModel::Rows );
581
+ }
582
+ else
583
+ {
584
+ moveBookmark ( mProjectTableModel , mQgisTableModel , index.row () - mQgisTableModel .rowCount () );
585
+ mTreeView ->scrollTo ( this ->index ( mQgisTableModel .rowCount () - 1 , 1 ) );
586
+ mTreeView ->setCurrentIndex ( this ->index ( mQgisTableModel .rowCount () - 1 , 1 ) );
587
+ mTreeView ->selectionModel ()->select ( this ->index ( mQgisTableModel .rowCount () - 1 , 1 ), QItemSelectionModel::Rows );
588
+ }
589
+ return true ;
590
+ }
591
+ if ( index.column () < mQgisTableModel .rowCount () )
592
+ {
593
+ return mQgisTableModel .setData ( index, value, role );
594
+ }
595
+ else
596
+ {
597
+ return mProjectTableModel .setData ( this ->index ( index.row () - mQgisTableModel .rowCount (), index.column () ), value, role );
598
+ }
599
+ }
600
+
601
+ Qt::ItemFlags QgsMergedBookmarksTableModel::flags ( const QModelIndex& index ) const
602
+ {
603
+ Q_UNUSED ( index );
604
+
605
+ Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
606
+ if ( index.column () == mQgisTableModel .columnCount () )
607
+ {
608
+ if ( !mProjectOpen )
609
+ {
610
+ return Qt::ItemIsSelectable;
611
+ }
612
+ flags |= Qt::ItemIsUserCheckable;
613
+ }
614
+ else
615
+ {
616
+ flags |= Qt::ItemIsEditable;
617
+ }
618
+ return flags;
619
+ }
620
+
621
+ bool QgsMergedBookmarksTableModel::removeRows ( int row, int count, const QModelIndex& parent )
622
+ {
623
+ Q_ASSERT ( count == 1 );
624
+
625
+ if ( row < mQgisTableModel .rowCount () )
626
+ {
627
+ return mQgisTableModel .removeRows ( row, count, parent );
628
+ }
629
+ else
630
+ {
631
+ return mProjectTableModel .removeRows ( row - mQgisTableModel .rowCount (), count, parent );
632
+ }
633
+ }
634
+
635
+ QVariant QgsMergedBookmarksTableModel::headerData ( int section, Qt::Orientation orientation, int role ) const
636
+ {
637
+ if ( section == mQgisTableModel .columnCount () )
638
+ {
639
+ if ( role == Qt::DisplayRole )
640
+ {
641
+ return QVariant ( tr ( " In Project" ) );
642
+ }
643
+ else
644
+ {
645
+ return mQgisTableModel .headerData ( 0 , orientation, role );
646
+ }
647
+ }
648
+ else
649
+ {
650
+ return mQgisTableModel .headerData ( section, orientation, role );
651
+ }
652
+ }
653
+
654
+ QAbstractTableModel* QgsMergedBookmarksTableModel::qgisModel ()
655
+ {
656
+ return &mQgisTableModel ;
657
+ }
658
+
659
+ void QgsMergedBookmarksTableModel::moveBookmark ( QAbstractTableModel& modelFrom, QAbstractTableModel& modelTo, int row )
660
+ {
661
+ QSqlTableModel* qgisModel = dynamic_cast <QSqlTableModel*>( &modelTo );
662
+ if ( qgisModel == NULL )
663
+ {
664
+ modelTo.insertRow ( -1 );
665
+ for ( int column = 1 ; column < modelFrom.columnCount () ; column++ )
666
+ {
667
+ modelTo.setData (
668
+ modelTo.index ( modelTo.rowCount () - 1 , column ),
669
+ modelFrom.data ( modelFrom.index ( row, column ) ) );
670
+ }
671
+ }
672
+ else
673
+ {
674
+ QSqlQuery query ( " INSERT INTO tbl_bookmarks(bookmark_id,name,project_name,xmin,ymin,xmax,ymax,projection_srid)"
675
+ " VALUES (NULL,:name,:project_name,:xmin,:xmax,:ymin,:ymax,:projection_srid)" ,
676
+ qgisModel->database () );
677
+
678
+ query.bindValue ( " :name" , modelFrom.data ( modelFrom.index ( row, 1 ) ).value <QString>() );
679
+ query.bindValue ( " :project_name" , modelFrom.data ( modelFrom.index ( row, 2 ) ).value <QString>() );
680
+ query.bindValue ( " :xmin" , modelFrom.data ( modelFrom.index ( row, 3 ) ).toDouble () );
681
+ query.bindValue ( " :ymin" , modelFrom.data ( modelFrom.index ( row, 4 ) ).toDouble () );
682
+ query.bindValue ( " :xmax" , modelFrom.data ( modelFrom.index ( row, 5 ) ).toDouble () );
683
+ query.bindValue ( " :ymax" , modelFrom.data ( modelFrom.index ( row, 6 ) ).toDouble () );
684
+ query.bindValue ( " :projection_srid" , modelFrom.data ( modelFrom.index ( row, 7 ) ).toInt () );
685
+
686
+ query.exec ();
687
+ qgisModel->setSort ( 0 , Qt::AscendingOrder );
688
+ qgisModel->select ();
689
+ }
690
+
691
+ modelFrom.removeRow ( row );
692
+ }
0 commit comments