mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
References to issues.qgis.org updated
This commit is contained in:
parent
a9e3950841
commit
38c8e757aa
13
BUGS
13
BUGS
@ -1,14 +1,11 @@
|
|||||||
Help I think I found a bug!
|
Help I think I found a bug!
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
If you find a bug in QGIS, you can search for it
|
If you find a bug in QGIS, first check if it has been reported:
|
||||||
|
|
||||||
https://issues.qgis.org/projects/qgis/search?issues=1
|
https://github.com/qgis/QGIS/issues
|
||||||
|
|
||||||
If you can't find an existing ticket, report it using the QGIS ticket/bug database at:
|
|
||||||
|
|
||||||
https://issues.qgis.org/projects/qgis/issues/new
|
|
||||||
|
|
||||||
|
If you can't find an existing ticket, report a new one, using the bug report template provided.
|
||||||
|
|
||||||
Some hints about when you should file a bug:
|
Some hints about when you should file a bug:
|
||||||
|
|
||||||
@ -22,9 +19,7 @@ Some hints about when you should file a bug:
|
|||||||
behave doesn't match ours. Hey we are all humans it can happen...
|
behave doesn't match ours. Hey we are all humans it can happen...
|
||||||
- Always check that your bug has not already been filed by someone else since
|
- Always check that your bug has not already been filed by someone else since
|
||||||
dealing with duplicate tickets causes a lot of time wasting.
|
dealing with duplicate tickets causes a lot of time wasting.
|
||||||
- Always provide contact details and make sure you are subscribed to the
|
- Be prepared to provided further feedback after the initial triage.
|
||||||
ticket entry (either by adding yourself to CC field or by logging in before
|
|
||||||
filing the ticket).
|
|
||||||
- Don't be offended if we don't see tickets as having the same priority as you
|
- Don't be offended if we don't see tickets as having the same priority as you
|
||||||
do. While we appreciate it's inconvenient if some issue prevents you doing
|
do. While we appreciate it's inconvenient if some issue prevents you doing
|
||||||
your work, we need to take the big picture view of things and focus on
|
your work, we need to take the big picture view of things and focus on
|
||||||
|
@ -227,7 +227,7 @@ IF(WITH_CORE)
|
|||||||
# https://sourceforge.net/p/mingw-w64/bugs/527/
|
# https://sourceforge.net/p/mingw-w64/bugs/527/
|
||||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80816
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80816
|
||||||
|
|
||||||
# also OpenBSD has no thread_local support, see https://issues.qgis.org/issues/17351
|
# also OpenBSD has no thread_local support, see https://github.com/qgis/QGIS/issues/25248
|
||||||
|
|
||||||
ELSE (MINGW OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
|
ELSE (MINGW OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
|
||||||
IF (WITH_THREAD_LOCAL)
|
IF (WITH_THREAD_LOCAL)
|
||||||
|
4
debian/upstream/metadata
vendored
4
debian/upstream/metadata
vendored
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
Bug-Database: https://issues.qgis.org/projects/qgis/issues
|
Bug-Database: https://github.com/qgis/QGIS/issues
|
||||||
Bug-Submit: https://issues.qgis.org/projects/qgis/issues/new
|
Bug-Submit: https://github.com/qgis/QGIS/issues
|
||||||
Contact: qgis-developer@lists.osgeo.org
|
Contact: qgis-developer@lists.osgeo.org
|
||||||
Donation: https://qgis.org/en/site/getinvolved/donations.html
|
Donation: https://qgis.org/en/site/getinvolved/donations.html
|
||||||
Name: QGIS
|
Name: QGIS
|
||||||
|
@ -59,9 +59,8 @@ users and developers.
|
|||||||
|
|
||||||
\section index_bugs Bug Reporting
|
\section index_bugs Bug Reporting
|
||||||
If you think you have found a bug, please report it using our <a
|
If you think you have found a bug, please report it using our <a
|
||||||
href="https://issues.qgis.org/projects/qgis">bug tracker</a>. When reporting bugs,
|
href="https://github.com/qgis/QGIS/issues">bug tracker</a>. When reporting bugs,
|
||||||
please include some contact information in case we need help with replicating
|
please be available to follow up on your initial report.
|
||||||
your issue.
|
|
||||||
|
|
||||||
\section index_ircchannel IRC channel
|
\section index_ircchannel IRC channel
|
||||||
Some QGIS users and developers can also often be found in the
|
Some QGIS users and developers can also often be found in the
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<metadata_license>MIT</metadata_license>
|
<metadata_license>MIT</metadata_license>
|
||||||
<project_license>GPL-2.0+</project_license>
|
<project_license>GPL-2.0+</project_license>
|
||||||
<url type="bugtracker">https://issues.qgis.org/projects/qgis/issues/</url>
|
<url type="bugtracker">https://github.com/qgis/QGIS/issues</url>
|
||||||
<url type="donation">https://qgis.org/en/site/getinvolved/donations.html</url>
|
<url type="donation">https://qgis.org/en/site/getinvolved/donations.html</url>
|
||||||
<url type="faq">https://qgis.org/en/site/getinvolved/faq/index.html</url>
|
<url type="faq">https://qgis.org/en/site/getinvolved/faq/index.html</url>
|
||||||
<url type="help">https://qgis.org/en/docs/index.html</url>
|
<url type="help">https://qgis.org/en/docs/index.html</url>
|
||||||
|
@ -9,7 +9,7 @@ icon=images/MetaSearch.svg
|
|||||||
author=Tom Kralidis
|
author=Tom Kralidis
|
||||||
email=tomkralidis@gmail.com
|
email=tomkralidis@gmail.com
|
||||||
tags=web,catalog,service,metadata,csw
|
tags=web,catalog,service,metadata,csw
|
||||||
homepage=http://qgis.org/
|
homepage=https://qgis.org/
|
||||||
tracker=https://issues.qgis.org/projects/qgis/issues?category_id=107&set_filter=1&status_id=o
|
tracker=https://issues.qgis.org/projects/qgis/issues?category_id=107&set_filter=1&status_id=o
|
||||||
repository=https://github.com/qgis/QGIS/tree/master/python/plugins/MetaSearch
|
repository=https://github.com/qgis/QGIS/tree/master/python/plugins/MetaSearch
|
||||||
experimental=False
|
experimental=False
|
||||||
|
@ -48,8 +48,8 @@ class TestDBManagerPostgisConnector(unittest.TestCase):
|
|||||||
connector._close_cursor(r)
|
connector._close_cursor(r)
|
||||||
return val
|
return val
|
||||||
|
|
||||||
# See https://issues.qgis.org/issues/16625
|
# See https://github.com/qgis/QGIS/issues/24525
|
||||||
# and https://issues.qgis.org/issues/10600
|
# and https://github.com/qgis/QGIS/issues/19005
|
||||||
def test_dbnameLessURI(self):
|
def test_dbnameLessURI(self):
|
||||||
c = PostGisDBConnector(QgsDataSourceUri())
|
c = PostGisDBConnector(QgsDataSourceUri())
|
||||||
self.assertIsInstance(c, PostGisDBConnector)
|
self.assertIsInstance(c, PostGisDBConnector)
|
||||||
|
@ -66,7 +66,7 @@ class TestDBManagerPostgisPlugin(unittest.TestCase):
|
|||||||
# Remove temporary service file
|
# Remove temporary service file
|
||||||
os.unlink(self.tmpservicefile)
|
os.unlink(self.tmpservicefile)
|
||||||
|
|
||||||
# See https://issues.qgis.org/issues/16625
|
# See https://github.com/qgis/QGIS/issues/24525
|
||||||
|
|
||||||
def test_rasterTableGdalURI(self):
|
def test_rasterTableGdalURI(self):
|
||||||
|
|
||||||
@ -92,8 +92,8 @@ class TestDBManagerPostgisPlugin(unittest.TestCase):
|
|||||||
obj = QObject() # needs to be kept alive
|
obj = QObject() # needs to be kept alive
|
||||||
|
|
||||||
# Test for empty URI
|
# Test for empty URI
|
||||||
# See https://issues.qgis.org/issues/16625
|
# See https://github.com/qgis/QGIS/issues/24525
|
||||||
# and https://issues.qgis.org/issues/10600
|
# and https://github.com/qgis/QGIS/issues/19005
|
||||||
|
|
||||||
expected_dbname = self.testdb
|
expected_dbname = self.testdb
|
||||||
os.environ['PGDATABASE'] = expected_dbname
|
os.environ['PGDATABASE'] = expected_dbname
|
||||||
@ -110,7 +110,7 @@ class TestDBManagerPostgisPlugin(unittest.TestCase):
|
|||||||
check_rasterTableGdalURI(expected_dbname)
|
check_rasterTableGdalURI(expected_dbname)
|
||||||
|
|
||||||
# Test for service-only URI
|
# Test for service-only URI
|
||||||
# See https://issues.qgis.org/issues/16626
|
# See https://github.com/qgis/QGIS/issues/24526
|
||||||
|
|
||||||
os.environ['PGDATABASE'] = 'fake'
|
os.environ['PGDATABASE'] = 'fake'
|
||||||
database = PGDatabase(obj, QgsDataSourceUri('service=dbmanager'))
|
database = PGDatabase(obj, QgsDataSourceUri('service=dbmanager'))
|
||||||
@ -124,7 +124,7 @@ class TestDBManagerPostgisPlugin(unittest.TestCase):
|
|||||||
|
|
||||||
check_rasterTableGdalURI(expected_dbname)
|
check_rasterTableGdalURI(expected_dbname)
|
||||||
|
|
||||||
# See http://issues.qgis.org/issues/16833
|
# See https://github.com/qgis/QGIS/issues/24732
|
||||||
def test_unicodeInQuery(self):
|
def test_unicodeInQuery(self):
|
||||||
os.environ['PGDATABASE'] = self.testdb
|
os.environ['PGDATABASE'] = self.testdb
|
||||||
obj = QObject() # needs to be kept alive
|
obj = QObject() # needs to be kept alive
|
||||||
|
@ -11,8 +11,8 @@ email=volayaf@gmail.com
|
|||||||
|
|
||||||
icon=:/images/themes/default/processingAlgorithm.svg
|
icon=:/images/themes/default/processingAlgorithm.svg
|
||||||
|
|
||||||
homepage=http://qgis.org
|
homepage=https://qgis.org
|
||||||
tracker=https://issues.qgis.org/projects/qgis/issues
|
tracker=https://github.com/qgis/QGIS/issues
|
||||||
repository=https://github.com/qgis/QGIS
|
repository=https://github.com/qgis/QGIS
|
||||||
|
|
||||||
hasProcessingProvider=yes
|
hasProcessingProvider=yes
|
||||||
|
@ -2765,7 +2765,7 @@ class TestGdalOgrToPostGis(unittest.TestCase):
|
|||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# See https://issues.qgis.org/issues/15706
|
# See https://github.com/qgis/QGIS/issues/23629
|
||||||
def test_getConnectionString(self):
|
def test_getConnectionString(self):
|
||||||
obj = OgrToPostGis()
|
obj = OgrToPostGis()
|
||||||
obj.initAlgorithm({})
|
obj.initAlgorithm({})
|
||||||
|
@ -51,7 +51,7 @@ Source5: %{name}-server-README.fedora
|
|||||||
Source6: %{name}-mime.xml
|
Source6: %{name}-mime.xml
|
||||||
|
|
||||||
# Fix builds on 64-bit machines
|
# Fix builds on 64-bit machines
|
||||||
# https://issues.qgis.org/issues/15602
|
# https://github.com/qgis/QGIS/issues/23525
|
||||||
# https://github.com/qgis/QGIS/commit/718581ffb12b723f9a3c0ae01b7ec2d8aed9d4bb.patch
|
# https://github.com/qgis/QGIS/commit/718581ffb12b723f9a3c0ae01b7ec2d8aed9d4bb.patch
|
||||||
Patch0: %{name}-lib64.patch
|
Patch0: %{name}-lib64.patch
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ Requires: %{name}%{?_isa} = %{combinedversion}-%{release}
|
|||||||
# This questions the sense of the libs package.
|
# This questions the sense of the libs package.
|
||||||
# WARNING: Rebuild QGIS whenever a new version of GRASS is shipped! Even though
|
# WARNING: Rebuild QGIS whenever a new version of GRASS is shipped! Even though
|
||||||
# the soname might stay the same, it won't work anymore.
|
# the soname might stay the same, it won't work anymore.
|
||||||
# http://issues.qgis.org/issues/5274
|
# https://github.com/qgis/QGIS/issues/14999
|
||||||
Requires: grass%{?_isa} = %{grass_version}
|
Requires: grass%{?_isa} = %{grass_version}
|
||||||
|
|
||||||
%description grass
|
%description grass
|
||||||
|
@ -220,7 +220,7 @@ QVariantMap QgsDissolveAlgorithm::processAlgorithm( const QVariantMap ¶meter
|
|||||||
if ( QgsWkbTypes::geometryType( result.wkbType() ) == QgsWkbTypes::LineGeometry )
|
if ( QgsWkbTypes::geometryType( result.wkbType() ) == QgsWkbTypes::LineGeometry )
|
||||||
result = result.mergeLines();
|
result = result.mergeLines();
|
||||||
// Geos may fail in some cases, let's try a slower but safer approach
|
// Geos may fail in some cases, let's try a slower but safer approach
|
||||||
// See: https://issues.qgis.org/issues/20591 - Dissolve tool failing to produce outputs
|
// See: https://github.com/qgis/QGIS/issues/28411 - Dissolve tool failing to produce outputs
|
||||||
if ( ! result.lastError().isEmpty() && parts.count() > 2 )
|
if ( ! result.lastError().isEmpty() && parts.count() > 2 )
|
||||||
{
|
{
|
||||||
if ( feedback->isCanceled() )
|
if ( feedback->isCanceled() )
|
||||||
|
@ -188,7 +188,7 @@ void QgsLayoutLabelWidget::mInsertExpressionButton_clicked()
|
|||||||
|
|
||||||
QString selText = mTextEdit->textCursor().selectedText();
|
QString selText = mTextEdit->textCursor().selectedText();
|
||||||
|
|
||||||
// html editor replaces newlines with Paragraph Separator characters - see https://issues.qgis.org/issues/19743
|
// html editor replaces newlines with Paragraph Separator characters - see https://github.com/qgis/QGIS/issues/27568
|
||||||
selText = selText.replace( QChar( 0x2029 ), QChar( '\n' ) );
|
selText = selText.replace( QChar( 0x2029 ), QChar( '\n' ) );
|
||||||
|
|
||||||
// edit the selected expression if there's one
|
// edit the selected expression if there's one
|
||||||
|
@ -583,7 +583,7 @@ void QgsAttributeTableDialog::runFieldCalculation( QgsVectorLayer *layer, const
|
|||||||
mLayer->endEditCommand();
|
mLayer->endEditCommand();
|
||||||
|
|
||||||
// refresh table with updated values
|
// refresh table with updated values
|
||||||
// fixes https://issues.qgis.org/issues/17312
|
// fixes https://github.com/qgis/QGIS/issues/25210
|
||||||
QgsAttributeTableModel *masterModel = mMainView->masterModel();
|
QgsAttributeTableModel *masterModel = mMainView->masterModel();
|
||||||
int modelColumn = masterModel->fieldCol( fieldindex );
|
int modelColumn = masterModel->fieldCol( fieldindex );
|
||||||
masterModel->reload( masterModel->index( 0, modelColumn ), masterModel->index( masterModel->rowCount() - 1, modelColumn ) );
|
masterModel->reload( masterModel->index( 0, modelColumn ), masterModel->index( masterModel->rowCount() - 1, modelColumn ) );
|
||||||
|
@ -212,7 +212,7 @@ QgsFeatureList QgsClipboard::stringToFeatureList( const QString &string, const Q
|
|||||||
// previous QgsOgrUtils::stringToFeatureList call
|
// previous QgsOgrUtils::stringToFeatureList call
|
||||||
// Get the first value of a \t separated list. WKT clipboard pasted
|
// Get the first value of a \t separated list. WKT clipboard pasted
|
||||||
// feature has first element the WKT geom.
|
// feature has first element the WKT geom.
|
||||||
// This split is to fix the following issue: https://issues.qgis.org/issues/16870
|
// This split is to fix the following issue: https://github.com/qgis/QGIS/issues/24769
|
||||||
// Value separators are set in generateClipboardText
|
// Value separators are set in generateClipboardText
|
||||||
QStringList fieldValues = row.split( '\t' );
|
QStringList fieldValues = row.split( '\t' );
|
||||||
if ( fieldValues.isEmpty() )
|
if ( fieldValues.isEmpty() )
|
||||||
|
@ -522,7 +522,7 @@ void QgsFieldCalculator::setPrecisionMinMax()
|
|||||||
bool precisionIsEnabled = minPrecType < maxPrecType;
|
bool precisionIsEnabled = minPrecType < maxPrecType;
|
||||||
mOutputFieldPrecisionSpinBox->setEnabled( precisionIsEnabled );
|
mOutputFieldPrecisionSpinBox->setEnabled( precisionIsEnabled );
|
||||||
// Do not set min/max if it's disabled or we'll loose the default value,
|
// Do not set min/max if it's disabled or we'll loose the default value,
|
||||||
// see https://issues.qgis.org/issues/19050 - QGIS saves integer field when
|
// see https://github.com/qgis/QGIS/issues/26880 - QGIS saves integer field when
|
||||||
// I create a new real field through field calculator (Update field works as intended)
|
// I create a new real field through field calculator (Update field works as intended)
|
||||||
if ( precisionIsEnabled )
|
if ( precisionIsEnabled )
|
||||||
{
|
{
|
||||||
|
@ -62,7 +62,7 @@ static void throwGEOSException( const char *fmt, ... )
|
|||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
// stupid stupid MSVC, *SOMETIMES* raises it's own exception if we throw GEOSException, resulting in a crash!
|
// stupid stupid MSVC, *SOMETIMES* raises it's own exception if we throw GEOSException, resulting in a crash!
|
||||||
// see https://issues.qgis.org/issues/14752
|
// see https://github.com/qgis/QGIS/issues/22709
|
||||||
// if you want to test alternative fixes for this, run the testqgsexpression.cpp test suite - that will crash
|
// if you want to test alternative fixes for this, run the testqgsexpression.cpp test suite - that will crash
|
||||||
// and burn on the "line_interpolate_point point" test if a GEOSException is thrown.
|
// and burn on the "line_interpolate_point point" test if a GEOSException is thrown.
|
||||||
// TODO - find a real fix for the underlying issue
|
// TODO - find a real fix for the underlying issue
|
||||||
|
@ -138,7 +138,7 @@ void QgsLayerTree::writeXml( QDomElement &parentElement, const QgsReadWriteConte
|
|||||||
|
|
||||||
for ( QgsMapLayer *layer : qgis::as_const( mCustomLayerOrder ) )
|
for ( QgsMapLayer *layer : qgis::as_const( mCustomLayerOrder ) )
|
||||||
{
|
{
|
||||||
// Safety belt, see https://issues.qgis.org/issues/19145
|
// Safety belt, see https://github.com/qgis/QGIS/issues/26975
|
||||||
// Crash when deleting an item from the layout legend
|
// Crash when deleting an item from the layout legend
|
||||||
if ( ! layer )
|
if ( ! layer )
|
||||||
continue;
|
continue;
|
||||||
|
@ -186,7 +186,7 @@ QImage QgsLayoutExporter::renderPageToImage( int page, QSize imageSize, double d
|
|||||||
{
|
{
|
||||||
// specified image size is wrong aspect ratio for paper rect - so ignore it and just use dpi
|
// specified image size is wrong aspect ratio for paper rect - so ignore it and just use dpi
|
||||||
// this can happen e.g. as a result of data defined page sizes
|
// this can happen e.g. as a result of data defined page sizes
|
||||||
// see https://issues.qgis.org/issues/18534
|
// see https://github.com/qgis/QGIS/issues/26422
|
||||||
imageSize = QSize();
|
imageSize = QSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ void QgsLabelingEngine::run( QgsRenderContext &context )
|
|||||||
// features are pre-rotated but not scaled/translated,
|
// features are pre-rotated but not scaled/translated,
|
||||||
// so we only disable rotation here. Ideally, they'd be
|
// so we only disable rotation here. Ideally, they'd be
|
||||||
// also pre-scaled/translated, as suggested here:
|
// also pre-scaled/translated, as suggested here:
|
||||||
// https://issues.qgis.org/issues/11856
|
// https://github.com/qgis/QGIS/issues/20071
|
||||||
QgsMapToPixel xform = mMapSettings.mapToPixel();
|
QgsMapToPixel xform = mMapSettings.mapToPixel();
|
||||||
xform.setMapRotation( 0, 0, 0 );
|
xform.setMapRotation( 0, 0, 0 );
|
||||||
#else
|
#else
|
||||||
|
@ -106,7 +106,7 @@ QString QgsMapSettingsUtils::worldFileContent( const QgsMapSettings &mapSettings
|
|||||||
double c = r[0] * s[2] + r[1] * s[5] + r[2];
|
double c = r[0] * s[2] + r[1] * s[5] + r[2];
|
||||||
double d = r[3] * s[0] + r[4] * s[3];
|
double d = r[3] * s[0] + r[4] * s[3];
|
||||||
// Pixel YDim - almost always negative
|
// Pixel YDim - almost always negative
|
||||||
// See https://en.wikipedia.org/wiki/World_file#cite_ref-3, https://issues.qgis.org/issues/18491
|
// See https://en.wikipedia.org/wiki/World_file#cite_ref-3, https://github.com/qgis/QGIS/issues/26379
|
||||||
double e = r[3] * s[1] + r[4] * s[4];
|
double e = r[3] * s[1] + r[4] * s[4];
|
||||||
double f = r[3] * s[2] + r[4] * s[5] + r[5];
|
double f = r[3] * s[2] + r[4] * s[5] + r[5];
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ bool QgsMapToPixel::updateMatrix()
|
|||||||
{
|
{
|
||||||
QTransform newMatrix = transform();
|
QTransform newMatrix = transform();
|
||||||
|
|
||||||
// https://issues.qgis.org/issues/12757
|
// https://github.com/qgis/QGIS/issues/20856
|
||||||
if ( !newMatrix.isInvertible() )
|
if ( !newMatrix.isInvertible() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -611,7 +611,7 @@ bool QgsPointLocator::rebuildIndex( int maxFeaturesToIndex )
|
|||||||
catch ( const QgsException &e )
|
catch ( const QgsException &e )
|
||||||
{
|
{
|
||||||
Q_UNUSED( e )
|
Q_UNUSED( e )
|
||||||
// See https://issues.qgis.org/issues/12634
|
// See https://github.com/qgis/QGIS/issues/20749
|
||||||
QgsDebugMsg( QStringLiteral( "could not transform bounding box to map, skipping the snap filter (%1)" ).arg( e.what() ) );
|
QgsDebugMsg( QStringLiteral( "could not transform bounding box to map, skipping the snap filter (%1)" ).arg( e.what() ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -662,7 +662,7 @@ bool QgsPointLocator::rebuildIndex( int maxFeaturesToIndex )
|
|||||||
catch ( const QgsException &e )
|
catch ( const QgsException &e )
|
||||||
{
|
{
|
||||||
Q_UNUSED( e )
|
Q_UNUSED( e )
|
||||||
// See https://issues.qgis.org/issues/12634
|
// See https://github.com/qgis/QGIS/issues/20749
|
||||||
QgsDebugMsg( QStringLiteral( "could not transform geometry to map, skipping the snap for it (%1)" ).arg( e.what() ) );
|
QgsDebugMsg( QStringLiteral( "could not transform geometry to map, skipping the snap for it (%1)" ).arg( e.what() ) );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -775,7 +775,7 @@ void QgsPointLocator::onFeatureAdded( QgsFeatureId fid )
|
|||||||
catch ( const QgsException &e )
|
catch ( const QgsException &e )
|
||||||
{
|
{
|
||||||
Q_UNUSED( e )
|
Q_UNUSED( e )
|
||||||
// See https://issues.qgis.org/issues/12634
|
// See https://github.com/qgis/QGIS/issues/20749
|
||||||
QgsDebugMsg( QStringLiteral( "could not transform geometry to map, skipping the snap for it (%1)" ).arg( e.what() ) );
|
QgsDebugMsg( QStringLiteral( "could not transform geometry to map, skipping the snap for it (%1)" ).arg( e.what() ) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ bool QgsTileCache::tile( const QUrl &url, QImage &image )
|
|||||||
image = QImage::fromData( imageData );
|
image = QImage::fromData( imageData );
|
||||||
|
|
||||||
// cache it as well (mutex is already locked)
|
// cache it as well (mutex is already locked)
|
||||||
// Check for null because it could be a redirect (see: https://issues.qgis.org/issues/16427 )
|
// Check for null because it could be a redirect (see: https://github.com/qgis/QGIS/issues/24336 )
|
||||||
if ( ! image.isNull( ) )
|
if ( ! image.isNull( ) )
|
||||||
{
|
{
|
||||||
sTileCache.insert( url, new QImage( image ) );
|
sTileCache.insert( url, new QImage( image ) );
|
||||||
|
@ -102,7 +102,7 @@ void QgsVectorLayerDiagramProvider::drawLabel( QgsRenderContext &context, pal::L
|
|||||||
// features are pre-rotated but not scaled/translated,
|
// features are pre-rotated but not scaled/translated,
|
||||||
// so we only disable rotation here. Ideally, they'd be
|
// so we only disable rotation here. Ideally, they'd be
|
||||||
// also pre-scaled/translated, as suggested here:
|
// also pre-scaled/translated, as suggested here:
|
||||||
// https://issues.qgis.org/issues/11856
|
// https://github.com/qgis/QGIS/issues/20071
|
||||||
QgsMapToPixel xform = context.mapToPixel();
|
QgsMapToPixel xform = context.mapToPixel();
|
||||||
xform.setMapRotation( 0, 0, 0 );
|
xform.setMapRotation( 0, 0, 0 );
|
||||||
#else
|
#else
|
||||||
|
@ -333,7 +333,7 @@ bool QgsVectorLayerEditBuffer::commitChanges( QStringList &commitErrors )
|
|||||||
// no yes => changeAttributeValues
|
// no yes => changeAttributeValues
|
||||||
// yes yes => changeFeatures
|
// yes yes => changeFeatures
|
||||||
|
|
||||||
// to fix https://issues.qgis.org/issues/15741
|
// to fix https://github.com/qgis/QGIS/issues/23663
|
||||||
// first of all check if feature to add is compatible with provider type
|
// first of all check if feature to add is compatible with provider type
|
||||||
// this check have to be done before all checks to avoid to clear internal
|
// this check have to be done before all checks to avoid to clear internal
|
||||||
// buffer if some of next steps success.
|
// buffer if some of next steps success.
|
||||||
|
@ -382,7 +382,7 @@ void QgsVectorLayerLabelProvider::drawLabelPrivate( pal::LabelPosition *label, Q
|
|||||||
// features are pre-rotated but not scaled/translated,
|
// features are pre-rotated but not scaled/translated,
|
||||||
// so we only disable rotation here. Ideally, they'd be
|
// so we only disable rotation here. Ideally, they'd be
|
||||||
// also pre-scaled/translated, as suggested here:
|
// also pre-scaled/translated, as suggested here:
|
||||||
// https://issues.qgis.org/issues/11856
|
// https://github.com/qgis/QGIS/issues/20071
|
||||||
QgsMapToPixel xform = context.mapToPixel();
|
QgsMapToPixel xform = context.mapToPixel();
|
||||||
xform.setMapRotation( 0, 0, 0 );
|
xform.setMapRotation( 0, 0, 0 );
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ originally part of the larger QgsRasterLayer class
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
// Threshold for treating values as exact match.
|
// Threshold for treating values as exact match.
|
||||||
// Set to 0.0 to support displaying small values (https://issues.qgis.org/issues/12581)
|
// Set to 0.0 to support displaying small values (https://github.com/qgis/QGIS/issues/20706)
|
||||||
#define DOUBLE_DIFF_THRESHOLD 0.0 // 0.0000001
|
#define DOUBLE_DIFF_THRESHOLD 0.0 // 0.0000001
|
||||||
|
|
||||||
#include "qgslogger.h"
|
#include "qgslogger.h"
|
||||||
@ -437,7 +437,7 @@ bool QgsColorRampShader::shade( double value, int *returnRedValue, int *returnGr
|
|||||||
{
|
{
|
||||||
// Assign the color of the higher class for every pixel between two class breaks.
|
// Assign the color of the higher class for every pixel between two class breaks.
|
||||||
// NOTE: The implementation has always been different than the documentation,
|
// NOTE: The implementation has always been different than the documentation,
|
||||||
// which said lower class before, see https://issues.qgis.org/issues/13995
|
// which said lower class before, see https://github.com/qgis/QGIS/issues/22009
|
||||||
if ( overflow )
|
if ( overflow )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -2082,7 +2082,7 @@ void QgsSvgMarkerSymbolLayer::renderPoint( QPointF point, QgsSymbolRenderContext
|
|||||||
|
|
||||||
if ( context.renderContext().flags() & QgsRenderContext::Antialiasing )
|
if ( context.renderContext().flags() & QgsRenderContext::Antialiasing )
|
||||||
{
|
{
|
||||||
// workaround issue with nested QPictures forgetting antialiasing flag - see https://issues.qgis.org/issues/14960
|
// workaround issue with nested QPictures forgetting antialiasing flag - see https://github.com/qgis/QGIS/issues/22909
|
||||||
p->setRenderHint( QPainter::Antialiasing );
|
p->setRenderHint( QPainter::Antialiasing );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -423,7 +423,7 @@ bool QgsRuleBasedRenderer::Rule::startRender( QgsRenderContext &context, const Q
|
|||||||
sf = QStringLiteral( "TRUE" );
|
sf = QStringLiteral( "TRUE" );
|
||||||
}
|
}
|
||||||
// If we have more than 50 rules (to stay on the safe side) make a binary tree or SQLITE will fail,
|
// If we have more than 50 rules (to stay on the safe side) make a binary tree or SQLITE will fail,
|
||||||
// see: http://issues.qgis.org/issues/19441
|
// see: https://github.com/qgis/QGIS/issues/27269
|
||||||
else if ( subfilters.count() > 50 )
|
else if ( subfilters.count() > 50 )
|
||||||
{
|
{
|
||||||
std::function<QString( const QStringList & )>bt = [ &bt ]( const QStringList & subf )
|
std::function<QString( const QStringList & )>bt = [ &bt ]( const QStringList & subf )
|
||||||
|
@ -36,7 +36,7 @@ QgsCrashDialog::QgsCrashDialog( QWidget *parent )
|
|||||||
"<a href=\"http://qgis.org/en/site/getinvolved/development/bugreporting.html#bugs-features-and-issues\">Follow the steps to help our developers.</a>"
|
"<a href=\"http://qgis.org/en/site/getinvolved/development/bugreporting.html#bugs-features-and-issues\">Follow the steps to help our developers.</a>"
|
||||||
"<br><br>"
|
"<br><br>"
|
||||||
"You can also send us a helpful bug report using the Copy Report button <br>and opening a ticket at "
|
"You can also send us a helpful bug report using the Copy Report button <br>and opening a ticket at "
|
||||||
"<a href=\"https://issues.qgis.org/\">issues.qgis.org</a>" ) );
|
"<a href=\"https://github.com/qgis/QGIS/issues\">QGIS Issue Tracker</a>" ) );
|
||||||
mHelpLabel->setTextInteractionFlags( Qt::TextBrowserInteraction );
|
mHelpLabel->setTextInteractionFlags( Qt::TextBrowserInteraction );
|
||||||
mHelpLabel->setOpenExternalLinks( true );
|
mHelpLabel->setOpenExternalLinks( true );
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ void QgsAttributeTableDelegate::setModelData( QWidget *editor, QAbstractItemMode
|
|||||||
|
|
||||||
if ( ( oldValue != newValue && newValue.isValid() ) || oldValue.isNull() != newValue.isNull() )
|
if ( ( oldValue != newValue && newValue.isValid() ) || oldValue.isNull() != newValue.isNull() )
|
||||||
{
|
{
|
||||||
// This fixes https://issues.qgis.org/issues/16492
|
// This fixes https://github.com/qgis/QGIS/issues/24398
|
||||||
QgsFeatureRequest request( fid );
|
QgsFeatureRequest request( fid );
|
||||||
request.setFlags( QgsFeatureRequest::NoGeometry );
|
request.setFlags( QgsFeatureRequest::NoGeometry );
|
||||||
request.setNoAttributes();
|
request.setNoAttributes();
|
||||||
|
@ -263,7 +263,7 @@ void QgsAttributeTableModel::updatedFields()
|
|||||||
void QgsAttributeTableModel::editCommandEnded()
|
void QgsAttributeTableModel::editCommandEnded()
|
||||||
{
|
{
|
||||||
// do not do reload(...) due would trigger (dataChanged) row sort
|
// do not do reload(...) due would trigger (dataChanged) row sort
|
||||||
// giving issue: https://issues.qgis.org/issues/15976
|
// giving issue: https://github.com/qgis/QGIS/issues/23892
|
||||||
bulkEditCommandEnded( );
|
bulkEditCommandEnded( );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,7 +332,7 @@ void QgsDualView::initModels( QgsMapCanvas *mapCanvas, const QgsFeatureRequest &
|
|||||||
mFilterModel = new QgsAttributeTableFilterModel( mapCanvas, mMasterModel, mMasterModel );
|
mFilterModel = new QgsAttributeTableFilterModel( mapCanvas, mMasterModel, mMasterModel );
|
||||||
|
|
||||||
// The following connections to invalidate() are necessary to keep the filter model in sync
|
// The following connections to invalidate() are necessary to keep the filter model in sync
|
||||||
// see regression https://issues.qgis.org/issues/15974
|
// see regression https://github.com/qgis/QGIS/issues/23890
|
||||||
connect( mMasterModel, &QgsAttributeTableModel::rowsRemoved, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
|
connect( mMasterModel, &QgsAttributeTableModel::rowsRemoved, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
|
||||||
connect( mMasterModel, &QgsAttributeTableModel::rowsInserted, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
|
connect( mMasterModel, &QgsAttributeTableModel::rowsInserted, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ void QgsTextEditWrapper::setWidgetValue( const QVariant &val )
|
|||||||
// We are checking for editable layer because in the form field context we do not
|
// We are checking for editable layer because in the form field context we do not
|
||||||
// want to strip the separator unless the layer is editable.
|
// want to strip the separator unless the layer is editable.
|
||||||
// Also check that we have something like a number in the value to avoid
|
// Also check that we have something like a number in the value to avoid
|
||||||
// stripping out dots from nextval when we have a schema: see https://issues.qgis.org/issues/20200
|
// stripping out dots from nextval when we have a schema: see https://github.com/qgis/QGIS/issues/28021
|
||||||
// "Wrong sequence detection with Postgres"
|
// "Wrong sequence detection with Postgres"
|
||||||
bool canConvertToDouble;
|
bool canConvertToDouble;
|
||||||
QLocale().toDouble( v, &canConvertToDouble );
|
QLocale().toDouble( v, &canConvertToDouble );
|
||||||
|
@ -217,7 +217,7 @@ void QgsValueRelationWidgetWrapper::setValue( const QVariant &value )
|
|||||||
else if ( mComboBox )
|
else if ( mComboBox )
|
||||||
{
|
{
|
||||||
// findData fails to tell a 0 from a NULL
|
// findData fails to tell a 0 from a NULL
|
||||||
// See: "Value relation, value 0 = NULL" - https://issues.qgis.org/issues/19981
|
// See: "Value relation, value 0 = NULL" - https://github.com/qgis/QGIS/issues/27803
|
||||||
int idx = -1; // default to not found
|
int idx = -1; // default to not found
|
||||||
for ( int i = 0; i < mComboBox->count(); i++ )
|
for ( int i = 0; i < mComboBox->count(); i++ )
|
||||||
{
|
{
|
||||||
|
@ -98,7 +98,7 @@ void QgsLayoutConfigObject::updateDataDefinedButton( QgsPropertyOverrideButton *
|
|||||||
QgsLayoutObject::DataDefinedProperty key = static_cast< QgsLayoutObject::DataDefinedProperty >( button->propertyKey() );
|
QgsLayoutObject::DataDefinedProperty key = static_cast< QgsLayoutObject::DataDefinedProperty >( button->propertyKey() );
|
||||||
whileBlocking( button )->setToProperty( mLayoutObject->dataDefinedProperties().property( key ) );
|
whileBlocking( button )->setToProperty( mLayoutObject->dataDefinedProperties().property( key ) );
|
||||||
|
|
||||||
// In case the button was initialized to a different config object, we need to reconnect to it here (see https://issues.qgis.org/issues/18694 )
|
// In case the button was initialized to a different config object, we need to reconnect to it here (see https://github.com/qgis/QGIS/issues/26582 )
|
||||||
connect( button, &QgsPropertyOverrideButton::changed, this, &QgsLayoutConfigObject::updateDataDefinedProperty, Qt::UniqueConnection );
|
connect( button, &QgsPropertyOverrideButton::changed, this, &QgsLayoutConfigObject::updateDataDefinedProperty, Qt::UniqueConnection );
|
||||||
button->registerExpressionContextGenerator( mLayoutObject );
|
button->registerExpressionContextGenerator( mLayoutObject );
|
||||||
}
|
}
|
||||||
|
@ -1022,7 +1022,7 @@ void QgsColorRampWidget::paintEvent( QPaintEvent *event )
|
|||||||
// we need to set pen width to 1,
|
// we need to set pen width to 1,
|
||||||
// since on retina displays
|
// since on retina displays
|
||||||
// pen.setWidth(0) <=> pen.width = 0.5
|
// pen.setWidth(0) <=> pen.width = 0.5
|
||||||
// see https://issues.qgis.org/issues/15984
|
// see https://github.com/qgis/QGIS/issues/23900
|
||||||
pen.setWidth( 1 );
|
pen.setWidth( 1 );
|
||||||
painter.setPen( pen );
|
painter.setPen( pen );
|
||||||
painter.setBrush( Qt::NoBrush );
|
painter.setBrush( Qt::NoBrush );
|
||||||
|
@ -665,7 +665,7 @@ void QgsPropertyOverrideButton::showExpressionDialog()
|
|||||||
{
|
{
|
||||||
QgsExpressionContext context = mExpressionContextGenerator ? mExpressionContextGenerator->createExpressionContext() : QgsExpressionContext();
|
QgsExpressionContext context = mExpressionContextGenerator ? mExpressionContextGenerator->createExpressionContext() : QgsExpressionContext();
|
||||||
|
|
||||||
// build sensible initial expression text - see https://issues.qgis.org/issues/18638
|
// build sensible initial expression text - see https://github.com/qgis/QGIS/issues/26526
|
||||||
QString currentExpression = ( mProperty.propertyType() == QgsProperty::StaticProperty && !mProperty.staticValue().isValid() ) ? QString()
|
QString currentExpression = ( mProperty.propertyType() == QgsProperty::StaticProperty && !mProperty.staticValue().isValid() ) ? QString()
|
||||||
: mProperty.asExpression();
|
: mProperty.asExpression();
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterLayer *rasterLa
|
|||||||
// pyramids are not necessarily built every time
|
// pyramids are not necessarily built every time
|
||||||
|
|
||||||
mCrsSelector->setLayerCrs( mLayerCrs );
|
mCrsSelector->setLayerCrs( mLayerCrs );
|
||||||
//default to layer CRS - see https://issues.qgis.org/issues/14209 for discussion
|
//default to layer CRS - see https://github.com/qgis/QGIS/issues/22211 for discussion
|
||||||
mCrsSelector->setCrs( mLayerCrs );
|
mCrsSelector->setCrs( mLayerCrs );
|
||||||
|
|
||||||
connect( mCrsSelector, &QgsProjectionSelectionWidget::crsChanged,
|
connect( mCrsSelector, &QgsProjectionSelectionWidget::crsChanged,
|
||||||
|
@ -551,7 +551,7 @@ void QgsRubberBand::updateRect()
|
|||||||
void QgsRubberBand::updatePosition()
|
void QgsRubberBand::updatePosition()
|
||||||
{
|
{
|
||||||
// re-compute rectangle
|
// re-compute rectangle
|
||||||
// See https://issues.qgis.org/issues/12392
|
// See https://github.com/qgis/QGIS/issues/20566
|
||||||
// NOTE: could be optimized by saving map-extent
|
// NOTE: could be optimized by saving map-extent
|
||||||
// of rubberband and simply re-projecting
|
// of rubberband and simply re-projecting
|
||||||
// that to device-rectangle on "updatePosition"
|
// that to device-rectangle on "updatePosition"
|
||||||
|
@ -918,7 +918,7 @@ QDomDocument QgsGrassModuleStandardOptions::readInterfaceDescription( const QStr
|
|||||||
|
|
||||||
// GRASS commands usually output text in system default encoding.
|
// GRASS commands usually output text in system default encoding.
|
||||||
// Let's use the System codec whether Qt doesn't recognize the encoding
|
// Let's use the System codec whether Qt doesn't recognize the encoding
|
||||||
// of the interface description (see https://issues.qgis.org/issues/4547)
|
// of the interface description (see https://github.com/qgis/QGIS/issues/14461)
|
||||||
QTextCodec *codec = nullptr;
|
QTextCodec *codec = nullptr;
|
||||||
|
|
||||||
QgsDebugMsg( "trying to get encoding name from XML interface description..." );
|
QgsDebugMsg( "trying to get encoding name from XML interface description..." );
|
||||||
|
@ -172,7 +172,7 @@ QgsGdalProvider::QgsGdalProvider( const QString &uri, const ProviderOptions &opt
|
|||||||
if ( !CPLGetConfigOption( "VRT_SHARED_SOURCE", nullptr ) )
|
if ( !CPLGetConfigOption( "VRT_SHARED_SOURCE", nullptr ) )
|
||||||
{
|
{
|
||||||
// GDAL < 2.3 has issues with use of VRT in multi-threaded
|
// GDAL < 2.3 has issues with use of VRT in multi-threaded
|
||||||
// scenarios. See https://issues.qgis.org/issues/16507 /
|
// scenarios. See https://github.com/qgis/QGIS/issues/24413 /
|
||||||
// https://trac.osgeo.org/gdal/ticket/6939
|
// https://trac.osgeo.org/gdal/ticket/6939
|
||||||
CPLSetConfigOption( "VRT_SHARED_SOURCE", "NO" );
|
CPLSetConfigOption( "VRT_SHARED_SOURCE", "NO" );
|
||||||
}
|
}
|
||||||
|
@ -1873,7 +1873,7 @@ bool QgsOgrProvider::addAttributes( const QList<QgsField> &attributes )
|
|||||||
// Without the below hack, the length of the first added field would have
|
// Without the below hack, the length of the first added field would have
|
||||||
// been reset to zero, and QgsVectorLayerEditBuffer::commitChanges() would
|
// been reset to zero, and QgsVectorLayerEditBuffer::commitChanges() would
|
||||||
// error out because of this.
|
// error out because of this.
|
||||||
// See https://issues.qgis.org/issues/19009
|
// See https://github.com/qgis/QGIS/issues/26840
|
||||||
for ( auto field : oldFields )
|
for ( auto field : oldFields )
|
||||||
{
|
{
|
||||||
int idx = mAttributeFields.lookupField( field.name() );
|
int idx = mAttributeFields.lookupField( field.name() );
|
||||||
@ -3726,7 +3726,7 @@ QSet<QVariant> QgsOgrProvider::uniqueValues( int index, int limit ) const
|
|||||||
// GPKG/SQLite fid
|
// GPKG/SQLite fid
|
||||||
// For GPKG and SQLITE drivers PK fields are not exposed as real fields, (and OGR_F_GetFID only
|
// For GPKG and SQLITE drivers PK fields are not exposed as real fields, (and OGR_F_GetFID only
|
||||||
// works with GPKG), so we are adding an extra column that will become index 0
|
// works with GPKG), so we are adding an extra column that will become index 0
|
||||||
// See https://issues.qgis.org/issues/21311
|
// See https://github.com/qgis/QGIS/issues/29129
|
||||||
if ( ( mGDALDriverName == QLatin1String( "GPKG" ) || mGDALDriverName == QLatin1String( "SQLite" ) )
|
if ( ( mGDALDriverName == QLatin1String( "GPKG" ) || mGDALDriverName == QLatin1String( "SQLite" ) )
|
||||||
&& mFirstFieldIsFid && index == 0 )
|
&& mFirstFieldIsFid && index == 0 )
|
||||||
{
|
{
|
||||||
|
@ -160,7 +160,7 @@ QgsPostgresConn *QgsPostgresConn::connectDb( const QString &conninfo, bool reado
|
|||||||
if ( shared )
|
if ( shared )
|
||||||
{
|
{
|
||||||
// sharing connection between threads is not safe
|
// sharing connection between threads is not safe
|
||||||
// See https://issues.qgis.org/issues/13141
|
// See https://github.com/qgis/QGIS/issues/21205
|
||||||
Q_ASSERT( QApplication::instance()->thread() == QThread::currentThread() );
|
Q_ASSERT( QApplication::instance()->thread() == QThread::currentThread() );
|
||||||
|
|
||||||
if ( connections.contains( conninfo ) )
|
if ( connections.contains( conninfo ) )
|
||||||
@ -1354,7 +1354,7 @@ qint64 QgsPostgresConn::getBinaryInt( QgsPostgresResult &queryResult, int row, i
|
|||||||
if ( mSwapEndian )
|
if ( mSwapEndian )
|
||||||
oid = ntohs( oid );
|
oid = ntohs( oid );
|
||||||
/* cast to signed 16bit
|
/* cast to signed 16bit
|
||||||
* See https://issues.qgis.org/issues/14262 */
|
* See https://github.com/qgis/QGIS/issues/22258 */
|
||||||
oid = ( qint16 )oid;
|
oid = ( qint16 )oid;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1404,7 +1404,7 @@ qint64 QgsPostgresConn::getBinaryInt( QgsPostgresResult &queryResult, int row, i
|
|||||||
if ( mSwapEndian )
|
if ( mSwapEndian )
|
||||||
oid = ntohl( oid );
|
oid = ntohl( oid );
|
||||||
/* cast to signed 32bit
|
/* cast to signed 32bit
|
||||||
* See https://issues.qgis.org/issues/14262 */
|
* See https://github.com/qgis/QGIS/issues/22258 */
|
||||||
oid = ( qint32 )oid;
|
oid = ( qint32 )oid;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ QgsPostgresProvider::pkType( const QgsField &f ) const
|
|||||||
// unless we can guarantee all values are unsigned
|
// unless we can guarantee all values are unsigned
|
||||||
// (in which case we could use pktUint64)
|
// (in which case we could use pktUint64)
|
||||||
// we'll have to use a Map type.
|
// we'll have to use a Map type.
|
||||||
// See https://issues.qgis.org/issues/14262
|
// See https://github.com/qgis/QGIS/issues/22258
|
||||||
return PktFidMap; // pktUint64
|
return PktFidMap; // pktUint64
|
||||||
|
|
||||||
case QVariant::Int:
|
case QVariant::Int:
|
||||||
@ -178,7 +178,7 @@ QgsPostgresProvider::QgsPostgresProvider( QString const &uri, const ProviderOpti
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: mValid would be true after true return from
|
// NOTE: mValid would be true after true return from
|
||||||
// getGeometryDetails, see https://issues.qgis.org/issues/13781
|
// getGeometryDetails, see https://github.com/qgis/QGIS/issues/21807
|
||||||
|
|
||||||
if ( mSpatialColType == SctTopoGeometry )
|
if ( mSpatialColType == SctTopoGeometry )
|
||||||
{
|
{
|
||||||
@ -3236,7 +3236,7 @@ long QgsPostgresProvider::featureCount() const
|
|||||||
if ( featuresCounted >= 0 )
|
if ( featuresCounted >= 0 )
|
||||||
return featuresCounted;
|
return featuresCounted;
|
||||||
|
|
||||||
// See: https://issues.qgis.org/issues/17388 - QGIS crashes on featureCount())
|
// See: https://github.com/qgis/QGIS/issues/25285 - QGIS crashes on featureCount())
|
||||||
if ( ! connectionRO() )
|
if ( ! connectionRO() )
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -487,7 +487,7 @@ class QgsPostgresUtils
|
|||||||
|
|
||||||
// We shift negative 32bit integers to above the max 32bit
|
// We shift negative 32bit integers to above the max 32bit
|
||||||
// positive integer to support the whole range of int32 values
|
// positive integer to support the whole range of int32 values
|
||||||
// See https://issues.qgis.org/issues/14262
|
// See https://github.com/qgis/QGIS/issues/22258
|
||||||
static qint64 int32pk_to_fid( qint32 x )
|
static qint64 int32pk_to_fid( qint32 x )
|
||||||
{
|
{
|
||||||
return x >= 0 ? x : x + INT32PK_OFFSET;
|
return x >= 0 ? x : x + INT32PK_OFFSET;
|
||||||
|
@ -1478,7 +1478,7 @@ bool QgsWFSProvider::readAttributesFromSchema( QDomDocument &schemaDoc,
|
|||||||
//attribute name
|
//attribute name
|
||||||
QString name = attributeElement.attribute( QStringLiteral( "name" ) );
|
QString name = attributeElement.attribute( QStringLiteral( "name" ) );
|
||||||
// Some servers like http://ogi.state.ok.us/geoserver/wfs on layer ogi:doq_centroids
|
// Some servers like http://ogi.state.ok.us/geoserver/wfs on layer ogi:doq_centroids
|
||||||
// return attribute names padded with spaces. See https://issues.qgis.org/issues/3426
|
// return attribute names padded with spaces. See https://github.com/qgis/QGIS/issues/13486
|
||||||
// I'm not completely sure how legal this
|
// I'm not completely sure how legal this
|
||||||
// is but this validates with Xerces 3.1, and its schema analyzer does also the trimming.
|
// is but this validates with Xerces 3.1, and its schema analyzer does also the trimming.
|
||||||
name = name.trimmed();
|
name = name.trimmed();
|
||||||
|
@ -59,7 +59,7 @@ namespace QgsWms
|
|||||||
renderJob.start();
|
renderJob.start();
|
||||||
|
|
||||||
// Allows the main thread to manage blocking call coming from rendering
|
// Allows the main thread to manage blocking call coming from rendering
|
||||||
// threads (see discussion in https://issues.qgis.org/issues/18988).
|
// threads (see discussion in https://github.com/qgis/QGIS/issues/26819).
|
||||||
QEventLoop loop;
|
QEventLoop loop;
|
||||||
QObject::connect( &renderJob, &QgsMapRendererParallelJob::finished, &loop, &QEventLoop::quit );
|
QObject::connect( &renderJob, &QgsMapRendererParallelJob::finished, &loop, &QEventLoop::quit );
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
@ -623,7 +623,7 @@ void TestQgsGeometrySnapper::snapMultiPolygonToPolygon()
|
|||||||
flist << ff;
|
flist << ff;
|
||||||
rl->dataProvider()->addFeatures( flist );
|
rl->dataProvider()->addFeatures( flist );
|
||||||
|
|
||||||
// test MultiPolygon that could be removed in the process https://issues.qgis.org/issues/18497
|
// test MultiPolygon that could be removed in the process https://github.com/qgis/QGIS/issues/26385
|
||||||
QgsGeometry polygonGeom = QgsGeometry::fromWkt( QStringLiteral( "MultiPolygon(((0.1 -0.1, 5 0.1, 9.9 0.1, 0.1 -0.1)))" ) );
|
QgsGeometry polygonGeom = QgsGeometry::fromWkt( QStringLiteral( "MultiPolygon(((0.1 -0.1, 5 0.1, 9.9 0.1, 0.1 -0.1)))" ) );
|
||||||
QgsGeometrySnapper snapper( rl );
|
QgsGeometrySnapper snapper( rl );
|
||||||
QgsGeometry result = snapper.snapGeometry( polygonGeom, 1 );
|
QgsGeometry result = snapper.snapGeometry( polygonGeom, 1 );
|
||||||
|
@ -209,7 +209,7 @@ void TestQgisAppClipboard::pasteWkt()
|
|||||||
QCOMPARE( point->y(), 30.0 );
|
QCOMPARE( point->y(), 30.0 );
|
||||||
|
|
||||||
// be sure parsing does not consider attached parameters that
|
// be sure parsing does not consider attached parameters that
|
||||||
// can change geometryType as in https://issues.qgis.org/issues/16870
|
// can change geometryType as in https://github.com/qgis/QGIS/issues/24769
|
||||||
mQgisApp->clipboard()->setText( QStringLiteral( "POINT (111 30)\t GoodFieldValue\nPOINT (125 10)\t(WrongFieldValue)" ) );
|
mQgisApp->clipboard()->setText( QStringLiteral( "POINT (111 30)\t GoodFieldValue\nPOINT (125 10)\t(WrongFieldValue)" ) );
|
||||||
|
|
||||||
features = mQgisApp->clipboard()->copyOf();
|
features = mQgisApp->clipboard()->copyOf();
|
||||||
|
@ -320,7 +320,7 @@ void TestQgsAttributeTable::testOrderColumn()
|
|||||||
|
|
||||||
std::unique_ptr< QgsAttributeTableDialog > dlg( new QgsAttributeTableDialog( tempLayer.get() ) );
|
std::unique_ptr< QgsAttributeTableDialog > dlg( new QgsAttributeTableDialog( tempLayer.get() ) );
|
||||||
|
|
||||||
// Issue https://issues.qgis.org/issues/20673
|
// Issue https://github.com/qgis/QGIS/issues/28493
|
||||||
// When we reorder column (last column becomes first column), and we select an entire row
|
// When we reorder column (last column becomes first column), and we select an entire row
|
||||||
// the currentIndex is no longer the first column, and consequently it breaks edition
|
// the currentIndex is no longer the first column, and consequently it breaks edition
|
||||||
|
|
||||||
|
@ -93,12 +93,12 @@ void TestQgsCurve::curveToLine()
|
|||||||
"LineString (0 0, 29.29 70.71, 100 100, 170.71 70.71, 200 0)", 2 );
|
"LineString (0 0, 29.29 70.71, 100 100, 170.71 70.71, 200 0)", 2 );
|
||||||
|
|
||||||
/* op: Maximum of M_PI / 8 degrees of angle, (a)symmetric */
|
/* op: Maximum of M_PI / 8 degrees of angle, (a)symmetric */
|
||||||
/* See https://issues.qgis.org/issues/16717 */
|
/* See https://github.com/qgis/QGIS/issues/24616 */
|
||||||
TEST_C2L( circularString, M_PI / 8, QgsAbstractGeometry::MaximumAngle,
|
TEST_C2L( circularString, M_PI / 8, QgsAbstractGeometry::MaximumAngle,
|
||||||
"LineString (0 0, 7.61 38.27, 29.29 70.71, 61.73 92.39, 100 100, 138.27 92.39, 170.71 70.71, 192.39 38.27, 200 0)", 2 );
|
"LineString (0 0, 7.61 38.27, 29.29 70.71, 61.73 92.39, 100 100, 138.27 92.39, 170.71 70.71, 192.39 38.27, 200 0)", 2 );
|
||||||
|
|
||||||
/* op: Maximum of 70 degrees of angle, symmetric */
|
/* op: Maximum of 70 degrees of angle, symmetric */
|
||||||
/* See https://issues.qgis.org/issues/16722 */
|
/* See https://github.com/qgis/QGIS/issues/24621 */
|
||||||
TEST_C2L( circularString, 70 * M_PI / 180, QgsAbstractGeometry::MaximumAngle,
|
TEST_C2L( circularString, 70 * M_PI / 180, QgsAbstractGeometry::MaximumAngle,
|
||||||
"LineString (0 0, 50 86.6, 150 86.6, 200 0)", 2 );
|
"LineString (0 0, 50 86.6, 150 86.6, 200 0)", 2 );
|
||||||
|
|
||||||
|
@ -16902,7 +16902,7 @@ QString TestQgsGeometry::elemToString( const QDomElement &elem ) const
|
|||||||
void TestQgsGeometry::wkbInOut()
|
void TestQgsGeometry::wkbInOut()
|
||||||
{
|
{
|
||||||
// Premature end of WKB
|
// Premature end of WKB
|
||||||
// See https://issues.qgis.org/issues/14182
|
// See https://github.com/qgis/QGIS/issues/22184
|
||||||
const char *hexwkb = "0102000000EF0000000000000000000000000000000000000000000000000000000000000000000000";
|
const char *hexwkb = "0102000000EF0000000000000000000000000000000000000000000000000000000000000000000000";
|
||||||
int size;
|
int size;
|
||||||
unsigned char *wkb = hex2bytes( hexwkb, &size );
|
unsigned char *wkb = hex2bytes( hexwkb, &size );
|
||||||
|
@ -549,7 +549,7 @@ void TestQgsGeometryUtils::testCircleCenterRadius()
|
|||||||
void TestQgsGeometryUtils::testSqrDistToLine()
|
void TestQgsGeometryUtils::testSqrDistToLine()
|
||||||
{
|
{
|
||||||
|
|
||||||
// See https://issues.qgis.org/issues/13952#note-26
|
// See https://github.com/qgis/QGIS/issues/21967#issuecomment-495853991
|
||||||
QgsPointXY qp( 771938, 6.95593e+06 );
|
QgsPointXY qp( 771938, 6.95593e+06 );
|
||||||
QgsPointXY p1( 771946, 6.95593e+06 );
|
QgsPointXY p1( 771946, 6.95593e+06 );
|
||||||
QgsPointXY p2( 771904, 6.95595e+06 );
|
QgsPointXY p2( 771904, 6.95595e+06 );
|
||||||
|
@ -638,7 +638,7 @@ bool TestQgsLabelingEngine::imageCheck( const QString &testName, QImage &image,
|
|||||||
return resultFlag;
|
return resultFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
// See https://issues.qgis.org/issues/15507
|
// See https://github.com/qgis/QGIS/issues/23431
|
||||||
void TestQgsLabelingEngine::testRegisterFeatureUnprojectible()
|
void TestQgsLabelingEngine::testRegisterFeatureUnprojectible()
|
||||||
{
|
{
|
||||||
QgsPalLayerSettings settings;
|
QgsPalLayerSettings settings;
|
||||||
@ -750,7 +750,7 @@ void TestQgsLabelingEngine::testParallelLabelSmallFeature()
|
|||||||
// This test assumes that NO label is drawn in this situation. In future we may want
|
// This test assumes that NO label is drawn in this situation. In future we may want
|
||||||
// to revisit this and e.g. draw a centered horizontal label over the feature -- in which
|
// to revisit this and e.g. draw a centered horizontal label over the feature -- in which
|
||||||
// case the reference image here should be freely revised. But for now, we just don't
|
// case the reference image here should be freely revised. But for now, we just don't
|
||||||
// want a hang/crash such as described in https://issues.qgis.org/issues/18283
|
// want a hang/crash such as described in https://github.com/qgis/QGIS/issues/26174
|
||||||
|
|
||||||
QgsPalLayerSettings settings;
|
QgsPalLayerSettings settings;
|
||||||
setDefaultLabelParams( settings );
|
setDefaultLabelParams( settings );
|
||||||
|
@ -43,7 +43,7 @@ class TestQgsLayerDefinition: public QObject
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* test that export does not crash: regression #18981
|
* test that export does not crash: regression #18981
|
||||||
* https://issues.qgis.org/issues/18981 - Save QLR crashes QGIS 3
|
* https://github.com/qgis/QGIS/issues/26812 - Save QLR crashes QGIS 3
|
||||||
*/
|
*/
|
||||||
void testExportDoesNotCrash();
|
void testExportDoesNotCrash();
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ TestQgsMapToPixelGeometrySimplifier::testIsGeneralizableByMapBoundingBox()
|
|||||||
void TestQgsMapToPixelGeometrySimplifier::testWkbDimensionMismatch()
|
void TestQgsMapToPixelGeometrySimplifier::testWkbDimensionMismatch()
|
||||||
{
|
{
|
||||||
// 2D multilinestring containing 2 3DZ linestrings
|
// 2D multilinestring containing 2 3DZ linestrings
|
||||||
// See https://issues.qgis.org/issues/12416
|
// See https://github.com/qgis/QGIS/issues/20588
|
||||||
// NOTE: the first line needs to be 5 vertices or more, or
|
// NOTE: the first line needs to be 5 vertices or more, or
|
||||||
// simplification won't even be attempted
|
// simplification won't even be attempted
|
||||||
const char *hexwkb = "010500000002000000010200008005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F00000000000000000000000000000040000000000000000000000000000000000000000000000840000000000000F03F0000000000000000000000000000244000000000000000008DEDB5A0F7C6B0BE010200008002000000000000000000000000000000000000000000000000000000000000000000000000000000000000008DEDB5A0F7C6B03E";
|
const char *hexwkb = "010500000002000000010200008005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F00000000000000000000000000000040000000000000000000000000000000000000000000000840000000000000F03F0000000000000000000000000000244000000000000000008DEDB5A0F7C6B0BE010200008002000000000000000000000000000000000000000000000000000000000000000000000000000000000000008DEDB5A0F7C6B03E";
|
||||||
|
@ -126,7 +126,7 @@ void TestQgsMarkerLineSymbol::lineOffset()
|
|||||||
mMapSettings->setLayers( QList<QgsMapLayer *>() << mLinesLayer );
|
mMapSettings->setLayers( QList<QgsMapLayer *>() << mLinesLayer );
|
||||||
|
|
||||||
// Negative offset on marker line
|
// Negative offset on marker line
|
||||||
// See https://issues.qgis.org/issues/13811
|
// See https://github.com/qgis/QGIS/issues/21836
|
||||||
|
|
||||||
QString qml = mTestDataDir + "marker_line_offset.qml";
|
QString qml = mTestDataDir + "marker_line_offset.qml";
|
||||||
bool success = false;
|
bool success = false;
|
||||||
@ -137,7 +137,7 @@ void TestQgsMarkerLineSymbol::lineOffset()
|
|||||||
QVERIFY( render( QStringLiteral( "line_offset" ) ) );
|
QVERIFY( render( QStringLiteral( "line_offset" ) ) );
|
||||||
|
|
||||||
// TODO: -0.0 offset, see
|
// TODO: -0.0 offset, see
|
||||||
// https://issues.qgis.org/issues/13811#note-1
|
// https://github.com/qgis/QGIS/issues/21836#issuecomment-495853073
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestQgsMarkerLineSymbol::pointNumInterval()
|
void TestQgsMarkerLineSymbol::pointNumInterval()
|
||||||
|
@ -439,7 +439,7 @@ void TestQgsRasterLayer::checkStats()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// test scale_factor and offset - uses netcdf file which may not be supported
|
// test scale_factor and offset - uses netcdf file which may not be supported
|
||||||
// see https://issues.qgis.org/issues/8417
|
// see https://github.com/qgis/QGIS/issues/17186
|
||||||
void TestQgsRasterLayer::checkScaleOffset()
|
void TestQgsRasterLayer::checkScaleOffset()
|
||||||
{
|
{
|
||||||
mReport += QLatin1String( "<h2>Check Stats with scale/offset</h2>\n" );
|
mReport += QLatin1String( "<h2>Check Stats with scale/offset</h2>\n" );
|
||||||
|
@ -128,8 +128,8 @@ void TestQgsSvgCache::threadSafePicture()
|
|||||||
// returns a detached copy which is safe to use across threads
|
// returns a detached copy which is safe to use across threads
|
||||||
|
|
||||||
// refs:
|
// refs:
|
||||||
// https://issues.qgis.org/issues/17077
|
// https://github.com/qgis/QGIS/issues/24976
|
||||||
// https://issues.qgis.org/issues/17089
|
// https://github.com/qgis/QGIS/issues/24988
|
||||||
|
|
||||||
QgsSvgCache cache;
|
QgsSvgCache cache;
|
||||||
QString svgPath = TEST_DATA_DIR + QStringLiteral( "/sample_svg.svg" );
|
QString svgPath = TEST_DATA_DIR + QStringLiteral( "/sample_svg.svg" );
|
||||||
|
@ -84,25 +84,25 @@ class TestQgsVectorFileWriter: public QObject
|
|||||||
void polygonGridTest();
|
void polygonGridTest();
|
||||||
//! As above but using a projected CRS
|
//! As above but using a projected CRS
|
||||||
void projectedPlygonGridTest();
|
void projectedPlygonGridTest();
|
||||||
//! This is a regression test ticket 1141 (broken Polish characters support since r8592) https://issues.qgis.org/issues/1141
|
//! This is a regression test ticket 1141 (broken Polish characters support since r8592) https://github.com/qgis/QGIS/issues/11201
|
||||||
void regression1141();
|
void regression1141();
|
||||||
//! Test prepareWriteAsVectorFormat
|
//! Test prepareWriteAsVectorFormat
|
||||||
void prepareWriteAsVectorFormat();
|
void prepareWriteAsVectorFormat();
|
||||||
//! Test regression #21714 (Exported GeoPackages have wrong field definitions)
|
//! Test regression #21714 (Exported GeoPackages have wrong field definitions)
|
||||||
void testTextFieldLength();
|
void testTextFieldLength();
|
||||||
//! Test https://issues.qgis.org/issues/22005
|
//! Test https://github.com/qgis/QGIS/issues/29819
|
||||||
void testExportToGpxPoint();
|
void testExportToGpxPoint();
|
||||||
//! Test https://issues.qgis.org/issues/22005
|
//! Test https://github.com/qgis/QGIS/issues/29819
|
||||||
void testExportToGpxPointTrackPoints();
|
void testExportToGpxPointTrackPoints();
|
||||||
//! Test https://issues.qgis.org/issues/22005
|
//! Test https://github.com/qgis/QGIS/issues/29819
|
||||||
void testExportToGpxPointRoutePoints();
|
void testExportToGpxPointRoutePoints();
|
||||||
//! Test https://issues.qgis.org/issues/22005
|
//! Test https://github.com/qgis/QGIS/issues/29819
|
||||||
void testExportToGpxLineString();
|
void testExportToGpxLineString();
|
||||||
//! Test https://issues.qgis.org/issues/22005
|
//! Test https://github.com/qgis/QGIS/issues/29819
|
||||||
void testExportToGpxLineStringForceTrack();
|
void testExportToGpxLineStringForceTrack();
|
||||||
//! Test https://issues.qgis.org/issues/22005
|
//! Test https://github.com/qgis/QGIS/issues/29819
|
||||||
void testExportToGpxMultiLineString();
|
void testExportToGpxMultiLineString();
|
||||||
//! Test https://issues.qgis.org/issues/22005
|
//! Test https://github.com/qgis/QGIS/issues/29819
|
||||||
void testExportToGpxMultiLineStringForceRoute();
|
void testExportToGpxMultiLineStringForceRoute();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -929,7 +929,7 @@ void TestQgsGeometryChecks::testSelfContactCheck()
|
|||||||
|
|
||||||
cleanupTestContext( testContext );
|
cleanupTestContext( testContext );
|
||||||
|
|
||||||
// https://issues.qgis.org/issues/20408
|
// https://github.com/qgis/QGIS/issues/28228
|
||||||
// test with a linestring which collapses to an empty linestring
|
// test with a linestring which collapses to an empty linestring
|
||||||
QgsGeometryCheckContext context( 1, QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) ), QgsCoordinateTransformContext() );
|
QgsGeometryCheckContext context( 1, QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) ), QgsCoordinateTransformContext() );
|
||||||
QgsGeometrySelfContactCheck check2( &context, QVariantMap() );
|
QgsGeometrySelfContactCheck check2( &context, QVariantMap() );
|
||||||
|
@ -132,7 +132,7 @@ void TestQgsRangeWidgetWrapper::cleanup()
|
|||||||
void TestQgsRangeWidgetWrapper::test_setDoubleRange()
|
void TestQgsRangeWidgetWrapper::test_setDoubleRange()
|
||||||
{
|
{
|
||||||
// Test setting scale range with doubles and NULL values, default range
|
// Test setting scale range with doubles and NULL values, default range
|
||||||
// See https://issues.qgis.org/issues/17878
|
// See https://github.com/qgis/QGIS/issues/25773
|
||||||
// QGIS 3 Vector Layer Fields Garbled when Clicking the Toggle Editing Icon
|
// QGIS 3 Vector Layer Fields Garbled when Clicking the Toggle Editing Icon
|
||||||
|
|
||||||
QgsDoubleSpinBox *editor = qobject_cast<QgsDoubleSpinBox *>( widget1->createWidget( nullptr ) );
|
QgsDoubleSpinBox *editor = qobject_cast<QgsDoubleSpinBox *>( widget1->createWidget( nullptr ) );
|
||||||
|
@ -342,7 +342,7 @@ void TestQgsRelationReferenceWidget::testSetGetForeignKey()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Test issue https://issues.qgis.org/issues/22071
|
// Test issue https://github.com/qgis/QGIS/issues/29884
|
||||||
// Relation reference widget wrong feature when "on map identification"
|
// Relation reference widget wrong feature when "on map identification"
|
||||||
void TestQgsRelationReferenceWidget::testIdentifyOnMap()
|
void TestQgsRelationReferenceWidget::testIdentifyOnMap()
|
||||||
{
|
{
|
||||||
|
@ -72,7 +72,7 @@ void TestQgsScaleRangeWidget::test_setScaleRange()
|
|||||||
// Test that setting scale range is always honoured
|
// Test that setting scale range is always honoured
|
||||||
// rather than being limited by previously set
|
// rather than being limited by previously set
|
||||||
// max or min.
|
// max or min.
|
||||||
// See https://issues.qgis.org/issues/15463
|
// See https://github.com/qgis/QGIS/issues/23389
|
||||||
|
|
||||||
widget->setScaleRange( 6, 4 );
|
widget->setScaleRange( 6, 4 );
|
||||||
QCOMPARE( widget->minimumScale(), 6.0 );
|
QCOMPARE( widget->minimumScale(), 6.0 );
|
||||||
|
@ -330,7 +330,7 @@ void TestQgsValueRelationWidgetWrapper::testDrillDownMulti()
|
|||||||
void TestQgsValueRelationWidgetWrapper::testZeroIndexInRelatedTable()
|
void TestQgsValueRelationWidgetWrapper::testZeroIndexInRelatedTable()
|
||||||
{
|
{
|
||||||
// findData fails to tell a 0 from a NULL
|
// findData fails to tell a 0 from a NULL
|
||||||
// See: "Value relation, value 0 = NULL" - https://issues.qgis.org/issues/19981
|
// See: "Value relation, value 0 = NULL" - https://github.com/qgis/QGIS/issues/27803
|
||||||
|
|
||||||
// create a vector layer
|
// create a vector layer
|
||||||
QgsVectorLayer vl1( QStringLiteral( "Polygon?crs=epsg:4326&field=pk:int&field=province:int&field=municipality:string" ), QStringLiteral( "vl1" ), QStringLiteral( "memory" ) );
|
QgsVectorLayer vl1( QStringLiteral( "Polygon?crs=epsg:4326&field=pk:int&field=province:int&field=municipality:string" ), QStringLiteral( "vl1" ), QStringLiteral( "memory" ) );
|
||||||
|
@ -327,7 +327,7 @@ class PyQgsOGRProvider(unittest.TestCase):
|
|||||||
self.assertEqual(gdal.GetConfigOption("GDAL_HTTP_PROXYUSERPWD"), "username")
|
self.assertEqual(gdal.GetConfigOption("GDAL_HTTP_PROXYUSERPWD"), "username")
|
||||||
|
|
||||||
def testEditGeoJsonRemoveField(self):
|
def testEditGeoJsonRemoveField(self):
|
||||||
""" Test bugfix of https://issues.qgis.org/issues/18596 (deleting an existing field)"""
|
""" Test bugfix of https://github.com/qgis/QGIS/issues/26484 (deleting an existing field)"""
|
||||||
|
|
||||||
datasource = os.path.join(self.basetestpath, 'testEditGeoJsonRemoveField.json')
|
datasource = os.path.join(self.basetestpath, 'testEditGeoJsonRemoveField.json')
|
||||||
with open(datasource, 'wt') as f:
|
with open(datasource, 'wt') as f:
|
||||||
@ -350,7 +350,7 @@ class PyQgsOGRProvider(unittest.TestCase):
|
|||||||
self.assertEqual(f['w'], 4)
|
self.assertEqual(f['w'], 4)
|
||||||
|
|
||||||
def testEditGeoJsonAddField(self):
|
def testEditGeoJsonAddField(self):
|
||||||
""" Test bugfix of https://issues.qgis.org/issues/18596 (adding a new field)"""
|
""" Test bugfix of https://github.com/qgis/QGIS/issues/26484 (adding a new field)"""
|
||||||
|
|
||||||
datasource = os.path.join(self.basetestpath, 'testEditGeoJsonAddField.json')
|
datasource = os.path.join(self.basetestpath, 'testEditGeoJsonAddField.json')
|
||||||
with open(datasource, 'wt') as f:
|
with open(datasource, 'wt') as f:
|
||||||
@ -377,7 +377,7 @@ class PyQgsOGRProvider(unittest.TestCase):
|
|||||||
self.assertEqual(len(vl.fields()), 1)
|
self.assertEqual(len(vl.fields()), 1)
|
||||||
|
|
||||||
def testEditGeoJsonAddFieldAndThenAddFeatures(self):
|
def testEditGeoJsonAddFieldAndThenAddFeatures(self):
|
||||||
""" Test bugfix of https://issues.qgis.org/issues/18596 (adding a new field)"""
|
""" Test bugfix of https://github.com/qgis/QGIS/issues/26484 (adding a new field)"""
|
||||||
|
|
||||||
datasource = os.path.join(self.basetestpath, 'testEditGeoJsonAddField.json')
|
datasource = os.path.join(self.basetestpath, 'testEditGeoJsonAddField.json')
|
||||||
with open(datasource, 'wt') as f:
|
with open(datasource, 'wt') as f:
|
||||||
|
@ -215,7 +215,7 @@ class TestPyQgsOGRProviderGpkg(unittest.TestCase):
|
|||||||
|
|
||||||
@unittest.skip(int(gdal.VersionInfo('VERSION_NUM')) < GDAL_COMPUTE_VERSION(2, 1, 2))
|
@unittest.skip(int(gdal.VersionInfo('VERSION_NUM')) < GDAL_COMPUTE_VERSION(2, 1, 2))
|
||||||
def testGeopackageExtentUpdate(self):
|
def testGeopackageExtentUpdate(self):
|
||||||
''' test https://issues.qgis.org/issues/15273 '''
|
''' test https://github.com/qgis/QGIS/issues/23209 '''
|
||||||
tmpfile = os.path.join(self.basetestpath, 'testGeopackageExtentUpdate.gpkg')
|
tmpfile = os.path.join(self.basetestpath, 'testGeopackageExtentUpdate.gpkg')
|
||||||
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
||||||
lyr = ds.CreateLayer('test', geom_type=ogr.wkbPoint)
|
lyr = ds.CreateLayer('test', geom_type=ogr.wkbPoint)
|
||||||
@ -643,7 +643,7 @@ class TestPyQgsOGRProviderGpkg(unittest.TestCase):
|
|||||||
self.assertEqual(lyr2.wkbType(), QgsWkbTypes.Point)
|
self.assertEqual(lyr2.wkbType(), QgsWkbTypes.Point)
|
||||||
|
|
||||||
def testGeopackageTwoLayerEdition(self):
|
def testGeopackageTwoLayerEdition(self):
|
||||||
''' test https://issues.qgis.org/issues/17034 '''
|
''' test https://github.com/qgis/QGIS/issues/24933 '''
|
||||||
tmpfile = os.path.join(self.basetestpath, 'testGeopackageTwoLayerEdition.gpkg')
|
tmpfile = os.path.join(self.basetestpath, 'testGeopackageTwoLayerEdition.gpkg')
|
||||||
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
||||||
lyr = ds.CreateLayer('layer1', geom_type=ogr.wkbPoint)
|
lyr = ds.CreateLayer('layer1', geom_type=ogr.wkbPoint)
|
||||||
@ -1033,7 +1033,7 @@ class TestPyQgsOGRProviderGpkg(unittest.TestCase):
|
|||||||
self.assertNotEqual(_lessdigits(subSet_vl.extent().toString()), unfiltered_extent)
|
self.assertNotEqual(_lessdigits(subSet_vl.extent().toString()), unfiltered_extent)
|
||||||
|
|
||||||
def testRequestWithoutGeometryOnLayerMixedGeometry(self):
|
def testRequestWithoutGeometryOnLayerMixedGeometry(self):
|
||||||
""" Test bugfix for https://issues.qgis.org/issues/19077 """
|
""" Test bugfix for https://github.com/qgis/QGIS/issues/26907 """
|
||||||
|
|
||||||
# Issue is more a generic one of the OGR provider, but easy to trigger with GPKG
|
# Issue is more a generic one of the OGR provider, but easy to trigger with GPKG
|
||||||
|
|
||||||
@ -1059,7 +1059,7 @@ class TestPyQgsOGRProviderGpkg(unittest.TestCase):
|
|||||||
self.assertEqual(len(features), 1)
|
self.assertEqual(len(features), 1)
|
||||||
|
|
||||||
def testAddingTwoIntFieldsWithWidth(self):
|
def testAddingTwoIntFieldsWithWidth(self):
|
||||||
""" Test buggfix for https://issues.qgis.org/issues/19009 """
|
""" Test buggfix for https://github.com/qgis/QGIS/issues/26840 """
|
||||||
|
|
||||||
tmpfile = os.path.join(self.basetestpath, 'testRequestWithoutGeometryOnLayerMixedGeometry.gpkg')
|
tmpfile = os.path.join(self.basetestpath, 'testRequestWithoutGeometryOnLayerMixedGeometry.gpkg')
|
||||||
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
||||||
@ -1079,7 +1079,7 @@ class TestPyQgsOGRProviderGpkg(unittest.TestCase):
|
|||||||
self.assertTrue(vl.commitChanges())
|
self.assertTrue(vl.commitChanges())
|
||||||
|
|
||||||
def testApproxFeatureCountAndExtent(self):
|
def testApproxFeatureCountAndExtent(self):
|
||||||
""" Test perf improvement for for https://issues.qgis.org/issues/18402 """
|
""" Test perf improvement for for https://github.com/qgis/QGIS/issues/26292 """
|
||||||
|
|
||||||
tmpfile = os.path.join(self.basetestpath, 'testApproxFeatureCountAndExtent.gpkg')
|
tmpfile = os.path.join(self.basetestpath, 'testApproxFeatureCountAndExtent.gpkg')
|
||||||
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
|
||||||
|
@ -240,7 +240,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
self.assertTrue(vl.isValid())
|
self.assertTrue(vl.isValid())
|
||||||
test_unique([f for f in vl.getFeatures()], 4)
|
test_unique([f for f in vl.getFeatures()], 4)
|
||||||
|
|
||||||
# See https://issues.qgis.org/issues/14262
|
# See https://github.com/qgis/QGIS/issues/22258
|
||||||
# TODO: accept multi-featured layers, and an array of values/fids
|
# TODO: accept multi-featured layers, and an array of values/fids
|
||||||
def testSignedIdentifiers(self):
|
def testSignedIdentifiers(self):
|
||||||
|
|
||||||
@ -815,7 +815,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
# If an attribute map is provided, QgsVectorLayerUtils.createFeature must
|
# If an attribute map is provided, QgsVectorLayerUtils.createFeature must
|
||||||
# respect it, otherwise default values from provider are checked.
|
# respect it, otherwise default values from provider are checked.
|
||||||
# User's choice will not be respected if the value violates unique constraints.
|
# User's choice will not be respected if the value violates unique constraints.
|
||||||
# See https://issues.qgis.org/issues/19936
|
# See https://github.com/qgis/QGIS/issues/27758
|
||||||
f = QgsVectorLayerUtils.createFeature(vl, attributes={1: 5, 3: 'map'})
|
f = QgsVectorLayerUtils.createFeature(vl, attributes={1: 5, 3: 'map'})
|
||||||
# changed so that createFeature respects user choice
|
# changed so that createFeature respects user choice
|
||||||
self.assertEqual(f.attributes(), [default_clause, 5, "'qgis'::text", 'map', None, None])
|
self.assertEqual(f.attributes(), [default_clause, 5, "'qgis'::text", 'map', None, None])
|
||||||
@ -829,7 +829,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
f = QgsVectorLayerUtils.createFeature(vl, attributes={1: 5})
|
f = QgsVectorLayerUtils.createFeature(vl, attributes={1: 5})
|
||||||
self.assertEqual(f.attributes(), [default_clause, 5, "'qgis'::text", 'mappy', None, None])
|
self.assertEqual(f.attributes(), [default_clause, 5, "'qgis'::text", 'mappy', None, None])
|
||||||
|
|
||||||
# See https://issues.qgis.org/issues/15188
|
# See https://github.com/qgis/QGIS/issues/23127
|
||||||
def testNumericPrecision(self):
|
def testNumericPrecision(self):
|
||||||
uri = 'point?field=f1:int'
|
uri = 'point?field=f1:int'
|
||||||
uri += '&field=f2:double(6,4)'
|
uri += '&field=f2:double(6,4)'
|
||||||
@ -853,7 +853,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
self.assertEqual(f['f2'], 123.456)
|
self.assertEqual(f['f2'], 123.456)
|
||||||
self.assertEqual(f['f3'], '12345678.90123456789')
|
self.assertEqual(f['f3'], '12345678.90123456789')
|
||||||
|
|
||||||
# See https://issues.qgis.org/issues/15226
|
# See https://github.com/qgis/QGIS/issues/23163
|
||||||
def testImportKey(self):
|
def testImportKey(self):
|
||||||
uri = 'point?field=f1:int'
|
uri = 'point?field=f1:int'
|
||||||
uri += '&field=F2:double(6,4)'
|
uri += '&field=F2:double(6,4)'
|
||||||
@ -895,7 +895,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
testKey(lyr, '"f1","F2","f3"', ['f1', 'F2', 'f3'])
|
testKey(lyr, '"f1","F2","f3"', ['f1', 'F2', 'f3'])
|
||||||
testKey(lyr, None, ['id'])
|
testKey(lyr, None, ['id'])
|
||||||
|
|
||||||
# See https://issues.qgis.org/issues/17518
|
# See https://github.com/qgis/QGIS/issues/25415
|
||||||
def testImportWithoutSchema(self):
|
def testImportWithoutSchema(self):
|
||||||
|
|
||||||
def _test(table, schema=None):
|
def _test(table, schema=None):
|
||||||
|
@ -977,7 +977,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
|
|
||||||
def testUpdatedFields(self):
|
def testUpdatedFields(self):
|
||||||
"""Test when referenced layer update its fields
|
"""Test when referenced layer update its fields
|
||||||
https://issues.qgis.org/issues/20893
|
https://github.com/qgis/QGIS/issues/28712
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ml = QgsVectorLayer("Point?srid=EPSG:4326&field=a:int", "mem", "memory")
|
ml = QgsVectorLayer("Point?srid=EPSG:4326&field=a:int", "mem", "memory")
|
||||||
|
@ -115,7 +115,7 @@ class TestPyQgsWFSProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
<xsd:complexContent>
|
<xsd:complexContent>
|
||||||
<xsd:extension base="gml:AbstractFeatureType">
|
<xsd:extension base="gml:AbstractFeatureType">
|
||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<!-- add a trailing space to the name to test https://issues.qgis.org/issues/3426 -->
|
<!-- add a trailing space to the name to test https://github.com/qgis/QGIS/issues/13486 -->
|
||||||
<xsd:element maxOccurs="1" minOccurs="0" name="pk " nillable="true" type="xsd:long"/>
|
<xsd:element maxOccurs="1" minOccurs="0" name="pk " nillable="true" type="xsd:long"/>
|
||||||
<xsd:element maxOccurs="1" minOccurs="0" name="cnt" nillable="true" type="xsd:long"/>
|
<xsd:element maxOccurs="1" minOccurs="0" name="cnt" nillable="true" type="xsd:long"/>
|
||||||
<xsd:element maxOccurs="1" minOccurs="0" name="name" nillable="true" type="xsd:string"/>
|
<xsd:element maxOccurs="1" minOccurs="0" name="name" nillable="true" type="xsd:string"/>
|
||||||
@ -2963,7 +2963,7 @@ class TestPyQgsWFSProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
self.assertEqual((got.x(), got.y()), (426858.0, 5427937.0))
|
self.assertEqual((got.x(), got.y()), (426858.0, 5427937.0))
|
||||||
|
|
||||||
def testGetFeatureWithNamespaces(self):
|
def testGetFeatureWithNamespaces(self):
|
||||||
''' test https://issues.qgis.org/issues/14685 '''
|
''' test https://github.com/qgis/QGIS/issues/22649 '''
|
||||||
|
|
||||||
endpoint = self.__class__.basetestpath + '/fake_qgis_http_endpoint_getfeature_with_namespaces'
|
endpoint = self.__class__.basetestpath + '/fake_qgis_http_endpoint_getfeature_with_namespaces'
|
||||||
|
|
||||||
@ -3552,7 +3552,7 @@ class TestPyQgsWFSProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
self.assertTrue(vl.isValid())
|
self.assertTrue(vl.isValid())
|
||||||
|
|
||||||
def testGeometryCollectionAsMultiLineString(self):
|
def testGeometryCollectionAsMultiLineString(self):
|
||||||
"""Test https://issues.qgis.org/issues/19571 """
|
"""Test https://github.com/qgis/QGIS/issues/27398 """
|
||||||
|
|
||||||
endpoint = self.__class__.basetestpath + '/fake_qgis_http_endpoint_gc_as_mls'
|
endpoint = self.__class__.basetestpath + '/fake_qgis_http_endpoint_gc_as_mls'
|
||||||
|
|
||||||
@ -3807,7 +3807,7 @@ class TestPyQgsWFSProvider(unittest.TestCase, ProviderTestCase):
|
|||||||
pass # skip this feature source test -- provider is not affected
|
pass # skip this feature source test -- provider is not affected
|
||||||
|
|
||||||
def testFilteredFeatureRequests(self):
|
def testFilteredFeatureRequests(self):
|
||||||
"""Test https://issues.qgis.org/issues/21077 """
|
"""Test https://github.com/qgis/QGIS/issues/28895 """
|
||||||
|
|
||||||
endpoint = self.__class__.basetestpath + '/fake_qgis_http_endpoint_filtered_feature_requests'
|
endpoint = self.__class__.basetestpath + '/fake_qgis_http_endpoint_filtered_feature_requests'
|
||||||
|
|
||||||
|
@ -875,7 +875,7 @@ class TestQgsGeometry(unittest.TestCase):
|
|||||||
"""Test we can simplify a complex geometry.
|
"""Test we can simplify a complex geometry.
|
||||||
|
|
||||||
Note: there is a ticket related to this issue here:
|
Note: there is a ticket related to this issue here:
|
||||||
https://issues.qgis.org/issues/4189
|
https://github.com/qgis/QGIS/issues/14164
|
||||||
|
|
||||||
Backstory: Ole Nielson pointed out an issue to me
|
Backstory: Ole Nielson pointed out an issue to me
|
||||||
(Tim Sutton) where simplify ftools was dropping
|
(Tim Sutton) where simplify ftools was dropping
|
||||||
@ -2285,7 +2285,7 @@ class TestQgsGeometry(unittest.TestCase):
|
|||||||
assert compareWkt(expWkt, wkt), "convertToType failed: from multiline to polygon. Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
assert compareWkt(expWkt, wkt), "convertToType failed: from multiline to polygon. Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
||||||
|
|
||||||
def testRegression13053(self):
|
def testRegression13053(self):
|
||||||
""" See https://issues.qgis.org/issues/13053 """
|
""" See https://github.com/qgis/QGIS/issues/21125 """
|
||||||
p = QgsGeometry.fromWkt('MULTIPOLYGON(((62.0 18.0, 62.0 19.0, 63.0 19.0, 63.0 18.0, 62.0 18.0)), ((63.0 19.0, 63.0 20.0, 64.0 20.0, 64.0 19.0, 63.0 19.0)))')
|
p = QgsGeometry.fromWkt('MULTIPOLYGON(((62.0 18.0, 62.0 19.0, 63.0 19.0, 63.0 18.0, 62.0 18.0)), ((63.0 19.0, 63.0 20.0, 64.0 20.0, 64.0 19.0, 63.0 19.0)))')
|
||||||
assert p is not None
|
assert p is not None
|
||||||
|
|
||||||
@ -2294,7 +2294,7 @@ class TestQgsGeometry(unittest.TestCase):
|
|||||||
assert compareWkt(expWkt, wkt), "testRegression13053 failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
assert compareWkt(expWkt, wkt), "testRegression13053 failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
||||||
|
|
||||||
def testRegression13055(self):
|
def testRegression13055(self):
|
||||||
""" See https://issues.qgis.org/issues/13055
|
""" See https://github.com/qgis/QGIS/issues/21127
|
||||||
Testing that invalid WKT with z values but not using PolygonZ is still parsed
|
Testing that invalid WKT with z values but not using PolygonZ is still parsed
|
||||||
by QGIS.
|
by QGIS.
|
||||||
"""
|
"""
|
||||||
@ -2306,7 +2306,7 @@ class TestQgsGeometry(unittest.TestCase):
|
|||||||
assert compareWkt(expWkt, wkt), "testRegression13055 failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
assert compareWkt(expWkt, wkt), "testRegression13055 failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
||||||
|
|
||||||
def testRegression13274(self):
|
def testRegression13274(self):
|
||||||
""" See https://issues.qgis.org/issues/13274
|
""" See https://github.com/qgis/QGIS/issues/21334
|
||||||
Testing that two combined linestrings produce another line string if possible
|
Testing that two combined linestrings produce another line string if possible
|
||||||
"""
|
"""
|
||||||
a = QgsGeometry.fromWkt('LineString (0 0, 1 0)')
|
a = QgsGeometry.fromWkt('LineString (0 0, 1 0)')
|
||||||
@ -2325,7 +2325,7 @@ class TestQgsGeometry(unittest.TestCase):
|
|||||||
wkt = g.asWkt()
|
wkt = g.asWkt()
|
||||||
assert compareWkt(expWkt, wkt), "testReshape failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
assert compareWkt(expWkt, wkt), "testReshape failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
|
||||||
|
|
||||||
# Test reshape a geometry involving the first/last vertex (https://issues.qgis.org/issues/14443)
|
# Test reshape a geometry involving the first/last vertex (https://github.com/qgis/QGIS/issues/22422)
|
||||||
g.reshapeGeometry(QgsLineString([QgsPoint(0.5, 1), QgsPoint(0, 0.5)]))
|
g.reshapeGeometry(QgsLineString([QgsPoint(0.5, 1), QgsPoint(0, 0.5)]))
|
||||||
|
|
||||||
expWkt = 'Polygon ((0 0.5, 0 0, 1 0, 1 0.5, 0.5 1, 0 0.5))'
|
expWkt = 'Polygon ((0 0.5, 0 0, 1 0, 1 0.5, 0.5 1, 0 0.5))'
|
||||||
|
@ -789,7 +789,7 @@ class TestQgsJsonUtils(unittest.TestCase):
|
|||||||
|
|
||||||
def testExportFeaturesWithLocale_regression20053(self):
|
def testExportFeaturesWithLocale_regression20053(self):
|
||||||
""" Test exporting feature export with range widgets and locale different than C
|
""" Test exporting feature export with range widgets and locale different than C
|
||||||
Regression: https://issues.qgis.org/issues/20053 - decimal separator in csv files
|
Regression: https://github.com/qgis/QGIS/issues/27875 - decimal separator in csv files
|
||||||
"""
|
"""
|
||||||
|
|
||||||
source = QgsVectorLayer("Point?field=name:string&field=cost:double&field=population:int&field=date:date",
|
source = QgsVectorLayer("Point?field=name:string&field=cost:double&field=population:int&field=date:date",
|
||||||
|
@ -366,7 +366,7 @@ class TestQgsLayoutAtlas(unittest.TestCase):
|
|||||||
self.assertEqual(self.atlas.currentFilename(), expected)
|
self.assertEqual(self.atlas.currentFilename(), expected)
|
||||||
self.atlas.endRender()
|
self.atlas.endRender()
|
||||||
|
|
||||||
# using feature attribute (refs https://issues.qgis.org/issues/19552)
|
# using feature attribute (refs https://github.com/qgis/QGIS/issues/27379)
|
||||||
|
|
||||||
self.atlas.setFilenameExpression("'output_' || attribute(@atlas_feature,'NAME_1')")
|
self.atlas.setFilenameExpression("'output_' || attribute(@atlas_feature,'NAME_1')")
|
||||||
expected = ['output_Basse-Normandie',
|
expected = ['output_Basse-Normandie',
|
||||||
|
@ -96,7 +96,7 @@ class TestPointBase(object):
|
|||||||
self._Mismatches['TestComposerImageVsCanvasPoint'] = 800
|
self._Mismatches['TestComposerImageVsCanvasPoint'] = 800
|
||||||
self._Mismatches['TestComposerImagePoint'] = 800
|
self._Mismatches['TestComposerImagePoint'] = 800
|
||||||
# verify fix for issues
|
# verify fix for issues
|
||||||
# https://issues.qgis.org/issues/9057
|
# https://github.com/qgis/QGIS/issues/17705
|
||||||
# http://gis.stackexchange.com/questions/86900
|
# http://gis.stackexchange.com/questions/86900
|
||||||
|
|
||||||
format = self.lyr.format()
|
format = self.lyr.format()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user