Skip to content

Commit 8519d74

Browse files
committed
Use QgsMemoryProviderUtils::createMemoryLayer when pasting as scratch layer
Also avoids annoying invalid "missing CRS" message/window when pasting features to a scratch layer
1 parent 767cb12 commit 8519d74

File tree

1 file changed

+3
-9
lines changed

1 file changed

+3
-9
lines changed

src/app/qgisapp.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ Q_GUI_EXPORT extern int qt_defaultDpiX();
201201
#include "qgsmessageviewer.h"
202202
#include "qgsmessagebar.h"
203203
#include "qgsmessagebaritem.h"
204+
#include "qgsmemoryproviderutils.h"
204205
#include "qgsmimedatautils.h"
205206
#include "qgsmessagelog.h"
206207
#include "qgsmultibandcolorrenderer.h"
@@ -8060,8 +8061,6 @@ QgsVectorLayer *QgisApp::pasteToNewMemoryVector()
80608061

80618062
QgsWkbTypes::Type wkbType = !typeCounts.isEmpty() ? typeCounts.keys().value( 0 ) : QgsWkbTypes::NoGeometry;
80628063

8063-
QString typeName = wkbType != QgsWkbTypes::NoGeometry ? QgsWkbTypes::displayString( wkbType ) : QStringLiteral( "none" );
8064-
80658064
if ( features.isEmpty() )
80668065
{
80678066
// should not happen
@@ -8072,15 +8071,13 @@ QgsVectorLayer *QgisApp::pasteToNewMemoryVector()
80728071
}
80738072
else if ( typeCounts.size() > 1 )
80748073
{
8074+
QString typeName = wkbType != QgsWkbTypes::NoGeometry ? QgsWkbTypes::displayString( wkbType ) : QStringLiteral( "none" );
80758075
messageBar()->pushMessage( tr( "Paste features" ),
80768076
tr( "Multiple geometry types found, features with geometry different from %1 will be created without geometry." ).arg( typeName ),
80778077
QgsMessageBar::INFO, messageTimeout() );
80788078
}
80798079

8080-
typeName += QStringLiteral( "?memoryid=%1" ).arg( QUuid::createUuid().toString() );
8081-
QgsDebugMsg( QString( "output wkbType = %1 typeName = %2" ).arg( wkbType ).arg( typeName ) );
8082-
8083-
QgsVectorLayer *layer = new QgsVectorLayer( typeName, QStringLiteral( "pasted_features" ), QStringLiteral( "memory" ) );
8080+
QgsVectorLayer *layer = QgsMemoryProviderUtils::createMemoryLayer( QStringLiteral( "pasted_features" ), QgsFields(), wkbType, clipboard()->crs() );
80848081

80858082
if ( !layer->isValid() || !layer->dataProvider() )
80868083
{
@@ -8092,9 +8089,6 @@ QgsVectorLayer *QgisApp::pasteToNewMemoryVector()
80928089
}
80938090

80948091
layer->startEditing();
8095-
if ( wkbType != QgsWkbTypes::NoGeometry )
8096-
layer->setCrs( clipboard()->crs(), false );
8097-
80988092
Q_FOREACH ( QgsField f, clipboard()->fields().toList() )
80998093
{
81008094
QgsDebugMsg( QString( "field %1 (%2)" ).arg( f.name(), QVariant::typeToName( f.type() ) ) );

0 commit comments

Comments
 (0)