QGIS API Documentation
4.3.0-Master (4ecdf0f3f59)
Toggle main menu visibility
Loading...
Searching...
No Matches
src
core
symbology
converters
qgssymbolconverterqml.cpp
Go to the documentation of this file.
1
/***************************************************************************
2
qgssymbolconverterqml.cpp
3
----------------------
4
begin : February 2026
5
copyright : (C) 2026 by Nyall Dawson
6
email : nyall dot dawson at gmail dot com
7
***************************************************************************
8
* *
9
* This program is free software; you can redistribute it and/or modify *
10
* it under the terms of the GNU General Public License as published by *
11
* the Free Software Foundation; either version 2 of the License, or *
12
* (at your option) any later version. *
13
* *
14
***************************************************************************/
15
16
#include "
qgssymbolconverterqml.h
"
17
18
#include "
qgsreadwritecontext.h
"
19
#include "
qgssymbol.h
"
20
#include "
qgssymbollayerutils.h
"
21
22
#include <QDomDocument>
23
#include <QDomElement>
24
#include <QObject>
25
#include <QString>
26
#include <QVariant>
27
28
using namespace
Qt::StringLiterals;
29
30
Qgis::SymbolConverterCapabilities
QgsSymbolConverterQml::capabilities
()
const
31
{
32
return
Qgis::SymbolConverterCapability::ReadSymbol
|
Qgis::SymbolConverterCapability::WriteSymbol
;
33
}
34
35
QString
QgsSymbolConverterQml::name
()
const
36
{
37
return
u
"qml"
_s;
38
}
39
40
QString
QgsSymbolConverterQml::formatName
()
const
41
{
42
return
QObject::tr(
"QGIS QML Style"
);
43
}
44
45
QVariant
QgsSymbolConverterQml::toVariant
(
const
QgsSymbol
*symbol,
QgsSymbolConverterContext
&context )
const
46
{
47
if
( !symbol )
48
return
QVariant();
49
50
QDomImplementation DomImplementation;
51
const
QDomDocumentType documentType = DomImplementation.createDocumentType( u
"qgis"
_s, u
"http://mrcc.com/qgis.dtd"
_s, u
"SYSTEM"
_s );
52
QDomDocument doc( documentType );
53
54
QDomElement symbolElem =
QgsSymbolLayerUtils::saveSymbol
( u
"symbol"
_s, symbol, doc, context.
readWriteContext
() );
55
56
if
( symbolElem.isNull() )
57
return
QVariant();
58
59
doc.appendChild( symbolElem );
60
return
doc.toString();
61
}
62
63
std::unique_ptr< QgsSymbol >
QgsSymbolConverterQml::createSymbol
(
const
QVariant &variant,
QgsSymbolConverterContext
&context )
const
64
{
65
const
QString xmlString = variant.toString();
66
if
( xmlString.isEmpty() )
67
return
nullptr
;
68
69
QDomDocument doc;
70
QString errorMsg;
71
int
errorLine, errorColumn;
72
if
( !doc.setContent( xmlString, &errorMsg, &errorLine, &errorColumn ) )
73
{
74
context.
pushError
( QObject::tr(
"Error parsing QML content: %1"
).arg( errorMsg ) );
75
return
nullptr
;
76
}
77
78
QDomElement root = doc.documentElement();
79
if
( root.isNull() )
80
{
81
context.
pushError
( QObject::tr(
"QML document is empty"
) );
82
return
nullptr
;
83
}
84
85
return
QgsSymbolLayerUtils::loadSymbol
( root, context.
readWriteContext
() );
86
}
Qgis::SymbolConverterCapabilities
QFlags< SymbolConverterCapability > SymbolConverterCapabilities
Symbol converter capabilities.
Definition
qgis.h:859
Qgis::SymbolConverterCapability::WriteSymbol
@ WriteSymbol
Allows writing symbols to variants.
Definition
qgis.h:849
Qgis::SymbolConverterCapability::ReadSymbol
@ ReadSymbol
Allows reading symbols from variants.
Definition
qgis.h:848
QgsSymbolConverterContext
Represents the context in which a QgsSymbolConverter conversion occurs.
Definition
qgssymbolconverter.h:35
QgsSymbolConverterContext::readWriteContext
QgsReadWriteContext & readWriteContext()
Returns the read-write context associated with the context.
Definition
qgssymbolconverter.cpp:26
QgsSymbolConverterContext::pushError
void pushError(const QString &error)
Pushes a error message generated during the conversion.
Definition
qgssymbolconverter.h:63
QgsSymbolConverterQml::createSymbol
std::unique_ptr< QgsSymbol > createSymbol(const QVariant &variant, QgsSymbolConverterContext &context) const override
Creates a new QgsSymbol from a QVariant representation.
Definition
qgssymbolconverterqml.cpp:63
QgsSymbolConverterQml::formatName
QString formatName() const override
Returns a translated, user-friendly name for the converter's data format.
Definition
qgssymbolconverterqml.cpp:40
QgsSymbolConverterQml::name
QString name() const override
Returns the unique name for the converter.
Definition
qgssymbolconverterqml.cpp:35
QgsSymbolConverterQml::capabilities
Qgis::SymbolConverterCapabilities capabilities() const override
Returns the capabilities of the converter.
Definition
qgssymbolconverterqml.cpp:30
QgsSymbolConverterQml::toVariant
QVariant toVariant(const QgsSymbol *symbol, QgsSymbolConverterContext &context) const override
Converts a symbol into a QVariant representation.
Definition
qgssymbolconverterqml.cpp:45
QgsSymbolLayerUtils::loadSymbol
static std::unique_ptr< QgsSymbol > loadSymbol(const QDomElement &element, const QgsReadWriteContext &context)
Attempts to load a symbol from a DOM element.
Definition
qgssymbollayerutils.cpp:1334
QgsSymbolLayerUtils::saveSymbol
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
Definition
qgssymbollayerutils.cpp:1542
QgsSymbol
Abstract base class for all rendered symbols.
Definition
qgssymbol.h:227
qgsreadwritecontext.h
qgssymbol.h
qgssymbolconverterqml.h
qgssymbollayerutils.h
Generated on
for QGIS API Documentation by
1.17.0