forked from qt-creator/qt-creator
QmlDesigner: Add tracing points to abstract property
Change-Id: Id980b75df7d84f2a993c867e30b4e6d2684e0b97 Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
@@ -5,12 +5,9 @@
|
|||||||
|
|
||||||
#include "qmldesignercorelib_global.h"
|
#include "qmldesignercorelib_global.h"
|
||||||
|
|
||||||
#include <utils/smallstring.h>
|
#include <designercore/tracing/qmldesignertracing.h>
|
||||||
|
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <QSharedPointer>
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QTextStream;
|
class QTextStream;
|
||||||
@@ -47,6 +44,8 @@ class QMLDESIGNERCORE_EXPORT AbstractProperty
|
|||||||
friend ModelNode;
|
friend ModelNode;
|
||||||
friend Internal::ModelPrivate;
|
friend Internal::ModelPrivate;
|
||||||
|
|
||||||
|
using SL = ModelTracing::SourceLocation;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AbstractProperty() = default;
|
AbstractProperty() = default;
|
||||||
AbstractProperty(const AbstractProperty &) = default;
|
AbstractProperty(const AbstractProperty &) = default;
|
||||||
@@ -67,27 +66,27 @@ public:
|
|||||||
bool exists() const;
|
bool exists() const;
|
||||||
ModelNode parentModelNode() const;
|
ModelNode parentModelNode() const;
|
||||||
|
|
||||||
bool isDefaultProperty() const;
|
bool isDefaultProperty(SL sl = {}) const;
|
||||||
VariantProperty toVariantProperty() const;
|
VariantProperty toVariantProperty(SL sl = {}) const;
|
||||||
NodeListProperty toNodeListProperty() const;
|
NodeListProperty toNodeListProperty(SL sl = {}) const;
|
||||||
NodeAbstractProperty toNodeAbstractProperty() const;
|
NodeAbstractProperty toNodeAbstractProperty(SL sl = {}) const;
|
||||||
BindingProperty toBindingProperty() const;
|
BindingProperty toBindingProperty(SL sl = {}) const;
|
||||||
NodeProperty toNodeProperty() const;
|
NodeProperty toNodeProperty(SL sl = {}) const;
|
||||||
SignalHandlerProperty toSignalHandlerProperty() const;
|
SignalHandlerProperty toSignalHandlerProperty(SL sl = {}) const;
|
||||||
SignalDeclarationProperty toSignalDeclarationProperty() const;
|
SignalDeclarationProperty toSignalDeclarationProperty(SL sl = {}) const;
|
||||||
|
|
||||||
bool isVariantProperty() const;
|
bool isVariantProperty(SL sl = {}) const;
|
||||||
bool isNodeListProperty() const;
|
bool isNodeListProperty(SL sl = {}) const;
|
||||||
bool isNodeAbstractProperty() const;
|
bool isNodeAbstractProperty(SL sl = {}) const;
|
||||||
bool isBindingProperty() const;
|
bool isBindingProperty(SL sl = {}) const;
|
||||||
bool isNodeProperty() const;
|
bool isNodeProperty(SL sl = {}) const;
|
||||||
bool isSignalHandlerProperty() const;
|
bool isSignalHandlerProperty(SL sl = {}) const;
|
||||||
bool isSignalDeclarationProperty() const;
|
bool isSignalDeclarationProperty(SL sl = {}) const;
|
||||||
|
|
||||||
PropertyType type() const;
|
PropertyType type(SL sl = {}) const;
|
||||||
|
|
||||||
bool isDynamic() const;
|
bool isDynamic(SL sl = {}) const;
|
||||||
TypeName dynamicTypeName() const;
|
TypeName dynamicTypeName(SL sl = {}) const;
|
||||||
|
|
||||||
template<typename... TypeName>
|
template<typename... TypeName>
|
||||||
bool hasDynamicTypeName(const TypeName &...typeName) const
|
bool hasDynamicTypeName(const TypeName &...typeName) const
|
||||||
|
@@ -3,18 +3,14 @@
|
|||||||
|
|
||||||
#include "abstractproperty.h"
|
#include "abstractproperty.h"
|
||||||
#include "internalnode_p.h"
|
#include "internalnode_p.h"
|
||||||
#include <model.h>
|
|
||||||
#include "model_p.h"
|
#include "model_p.h"
|
||||||
#include <modelnode.h>
|
|
||||||
#include "variantproperty.h"
|
|
||||||
#include "bindingproperty.h"
|
|
||||||
#include "signalhandlerproperty.h"
|
|
||||||
#include "nodeproperty.h"
|
|
||||||
#include "nodeabstractproperty.h"
|
|
||||||
#include "nodelistproperty.h"
|
#include "nodelistproperty.h"
|
||||||
#include <QTextStream>
|
#include "nodeproperty.h"
|
||||||
|
#include "signalhandlerproperty.h"
|
||||||
|
#include "variantproperty.h"
|
||||||
|
|
||||||
#include <QByteArrayView>
|
#include <QByteArrayView>
|
||||||
|
#include <QTextStream>
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
@@ -47,13 +43,11 @@ AbstractProperty::AbstractProperty(const Internal::InternalPropertyPointer &prop
|
|||||||
}
|
}
|
||||||
|
|
||||||
AbstractProperty::AbstractProperty(const AbstractProperty &property, AbstractView *view)
|
AbstractProperty::AbstractProperty(const AbstractProperty &property, AbstractView *view)
|
||||||
: m_propertyName(property.name()),
|
: m_propertyName(property.name())
|
||||||
m_internalNode(property.internalNode()),
|
, m_internalNode(property.internalNode())
|
||||||
m_model(property.model()),
|
, m_model(property.model())
|
||||||
m_view(view)
|
, m_view(view)
|
||||||
{
|
{}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractProperty::~AbstractProperty() = default;
|
AbstractProperty::~AbstractProperty() = default;
|
||||||
|
|
||||||
@@ -105,104 +99,141 @@ ModelNode AbstractProperty::parentModelNode() const
|
|||||||
/*!
|
/*!
|
||||||
Returns whether the property is the default property for the model node.
|
Returns whether the property is the default property for the model node.
|
||||||
*/
|
*/
|
||||||
bool AbstractProperty::isDefaultProperty() const
|
bool AbstractProperty::isDefaultProperty(SL sl) const
|
||||||
{
|
{
|
||||||
return ModelNode(m_internalNode, m_model.data(), view()).metaInfo().defaultPropertyName() == m_propertyName;
|
NanotraceHR::Tracer tracer{"abstract property is default property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
|
return ModelNode(m_internalNode, m_model.data(), view()).metaInfo(sl).defaultPropertyName(sl)
|
||||||
|
== m_propertyName;
|
||||||
}
|
}
|
||||||
|
|
||||||
VariantProperty AbstractProperty::toVariantProperty() const
|
VariantProperty AbstractProperty::toVariantProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property to variant property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
VariantProperty propertyVariant(name(), internalNodeSharedPointer(), model(), view());
|
VariantProperty propertyVariant(name(), internalNodeSharedPointer(), model(), view());
|
||||||
|
|
||||||
if (propertyVariant.isVariantProperty())
|
if (propertyVariant.isVariantProperty(sl))
|
||||||
return propertyVariant;
|
return propertyVariant;
|
||||||
|
|
||||||
return VariantProperty();
|
return VariantProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeProperty AbstractProperty::toNodeProperty() const
|
NodeProperty AbstractProperty::toNodeProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property to node property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
NodeProperty propertyNode(name(), internalNodeSharedPointer(), model(), view());
|
NodeProperty propertyNode(name(), internalNodeSharedPointer(), model(), view());
|
||||||
|
|
||||||
if (propertyNode.isNodeProperty())
|
if (propertyNode.isNodeProperty(sl))
|
||||||
return propertyNode;
|
return propertyNode;
|
||||||
|
|
||||||
return NodeProperty();
|
return NodeProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
SignalHandlerProperty AbstractProperty::toSignalHandlerProperty() const
|
SignalHandlerProperty AbstractProperty::toSignalHandlerProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property to signal handler property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
SignalHandlerProperty propertyNode(name(), internalNodeSharedPointer(), model(), view());
|
SignalHandlerProperty propertyNode(name(), internalNodeSharedPointer(), model(), view());
|
||||||
|
|
||||||
if (propertyNode.isSignalHandlerProperty())
|
if (propertyNode.isSignalHandlerProperty(sl))
|
||||||
return propertyNode;
|
return propertyNode;
|
||||||
|
|
||||||
return SignalHandlerProperty();
|
return SignalHandlerProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
SignalDeclarationProperty AbstractProperty::toSignalDeclarationProperty() const
|
SignalDeclarationProperty AbstractProperty::toSignalDeclarationProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property to signal declaration property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
SignalDeclarationProperty propertyNode(name(), internalNodeSharedPointer(), model(), view());
|
SignalDeclarationProperty propertyNode(name(), internalNodeSharedPointer(), model(), view());
|
||||||
|
|
||||||
if (propertyNode.isSignalDeclarationProperty())
|
if (propertyNode.isSignalDeclarationProperty(sl))
|
||||||
return propertyNode;
|
return propertyNode;
|
||||||
|
|
||||||
return SignalDeclarationProperty();
|
return SignalDeclarationProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeListProperty AbstractProperty::toNodeListProperty() const
|
NodeListProperty AbstractProperty::toNodeListProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property to node list property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
NodeListProperty propertyNodeList(name(), internalNodeSharedPointer(), model(), view());
|
NodeListProperty propertyNodeList(name(), internalNodeSharedPointer(), model(), view());
|
||||||
|
|
||||||
if (propertyNodeList.isNodeListProperty())
|
if (propertyNodeList.isNodeListProperty(sl))
|
||||||
return propertyNodeList;
|
return propertyNodeList;
|
||||||
|
|
||||||
return NodeListProperty();
|
return NodeListProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeAbstractProperty AbstractProperty::toNodeAbstractProperty() const
|
NodeAbstractProperty AbstractProperty::toNodeAbstractProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property to node abstract property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
NodeAbstractProperty propertyNodeAbstract(name(), internalNodeSharedPointer(), model(), view());
|
NodeAbstractProperty propertyNodeAbstract(name(), internalNodeSharedPointer(), model(), view());
|
||||||
|
|
||||||
if (propertyNodeAbstract.isNodeAbstractProperty())
|
if (propertyNodeAbstract.isNodeAbstractProperty(sl))
|
||||||
return propertyNodeAbstract;
|
return propertyNodeAbstract;
|
||||||
|
|
||||||
return NodeAbstractProperty();
|
return NodeAbstractProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
BindingProperty AbstractProperty::toBindingProperty() const
|
BindingProperty AbstractProperty::toBindingProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property to binding property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
BindingProperty propertyBinding(name(), internalNodeSharedPointer(), model(), view());
|
BindingProperty propertyBinding(name(), internalNodeSharedPointer(), model(), view());
|
||||||
|
|
||||||
if (propertyBinding.isBindingProperty())
|
if (propertyBinding.isBindingProperty(sl))
|
||||||
return propertyBinding;
|
return propertyBinding;
|
||||||
|
|
||||||
return BindingProperty();
|
return BindingProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isVariantProperty() const
|
bool AbstractProperty::isVariantProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property is variant property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -212,8 +243,12 @@ bool AbstractProperty::isVariantProperty() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isNodeAbstractProperty() const
|
bool AbstractProperty::isNodeAbstractProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property is node abstract property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -223,8 +258,12 @@ bool AbstractProperty::isNodeAbstractProperty() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isNodeListProperty() const
|
bool AbstractProperty::isNodeListProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property is node list property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -234,8 +273,12 @@ bool AbstractProperty::isNodeListProperty() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isNodeProperty() const
|
bool AbstractProperty::isNodeProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property is node property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -245,8 +288,12 @@ bool AbstractProperty::isNodeProperty() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isSignalHandlerProperty() const
|
bool AbstractProperty::isSignalHandlerProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property is signal handler property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -256,8 +303,12 @@ bool AbstractProperty::isSignalHandlerProperty() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isSignalDeclarationProperty() const
|
bool AbstractProperty::isSignalDeclarationProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property is signal declaration property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -267,8 +318,12 @@ bool AbstractProperty::isSignalDeclarationProperty() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyType AbstractProperty::type() const
|
PropertyType AbstractProperty::type(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property type",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return PropertyType::None;
|
return PropertyType::None;
|
||||||
|
|
||||||
@@ -278,8 +333,12 @@ PropertyType AbstractProperty::type() const
|
|||||||
return PropertyType::None;
|
return PropertyType::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isBindingProperty() const
|
bool AbstractProperty::isBindingProperty(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property is binding property",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -289,13 +348,21 @@ bool AbstractProperty::isBindingProperty() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProperty::isDynamic() const
|
bool AbstractProperty::isDynamic(SL sl) const
|
||||||
{
|
{
|
||||||
return !dynamicTypeName().isEmpty();
|
NanotraceHR::Tracer tracer{"abstract property is dynamic",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
|
return !dynamicTypeName(sl).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeName AbstractProperty::dynamicTypeName() const
|
TypeName AbstractProperty::dynamicTypeName(SL sl) const
|
||||||
{
|
{
|
||||||
|
NanotraceHR::Tracer tracer{"abstract property dynamic type name",
|
||||||
|
ModelTracing::category(),
|
||||||
|
keyValue("caller location", sl)};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
@@ -59,7 +59,7 @@ public:
|
|||||||
int majorVersion,
|
int majorVersion,
|
||||||
int minorVersion,
|
int minorVersion,
|
||||||
qint32 internalId,
|
qint32 internalId,
|
||||||
ModelTracing::Category::FlowTokenType flowTraceToken)
|
ModelTracing::StringCategory::FlowTokenType flowTraceToken)
|
||||||
: typeName(typeName.toByteArray())
|
: typeName(typeName.toByteArray())
|
||||||
, majorVersion(majorVersion)
|
, majorVersion(majorVersion)
|
||||||
, minorVersion(minorVersion)
|
, minorVersion(minorVersion)
|
||||||
|
@@ -348,7 +348,8 @@ public:
|
|||||||
NotNullPointer<ProjectStorageType> projectStorage = nullptr;
|
NotNullPointer<ProjectStorageType> projectStorage = nullptr;
|
||||||
NotNullPointer<PathCacheType> pathCache = nullptr;
|
NotNullPointer<PathCacheType> pathCache = nullptr;
|
||||||
NotNullPointer<ProjectStorageTriggerUpdateInterface> projectStorageTriggerUpdate = nullptr;
|
NotNullPointer<ProjectStorageTriggerUpdateInterface> projectStorageTriggerUpdate = nullptr;
|
||||||
ModelTracing::AsynchronousToken traceToken = ModelTracing::category().beginAsynchronous("Model");
|
ModelTracing::AsynchronousToken traceToken = ModelTracing::stringCategory().beginAsynchronous(
|
||||||
|
"Model");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Model *m_model = nullptr;
|
Model *m_model = nullptr;
|
||||||
|
@@ -55,7 +55,8 @@ StringEventQueue &stringEventQueue()
|
|||||||
namespace ModelTracing {
|
namespace ModelTracing {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
thread_local Category category_{"model", Tracing::stringEventQueue(), category};
|
thread_local Category category_{"model", Tracing::eventQueueWithStringArguments(), category};
|
||||||
|
thread_local StringCategory stringCategory_{"model", Tracing::stringEventQueue(), stringCategory};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@@ -64,6 +65,11 @@ Category &category()
|
|||||||
return category_;
|
return category_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StringCategory &stringCategory()
|
||||||
|
{
|
||||||
|
return stringCategory_;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ModelTracing
|
} // namespace ModelTracing
|
||||||
|
|
||||||
namespace ProjectStorageTracing {
|
namespace ProjectStorageTracing {
|
||||||
|
@@ -39,11 +39,12 @@ constexpr NanotraceHR::Tracing tracingStatus()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
using Category = NanotraceHR::StringCategory<tracingStatus()>;
|
using Category = NanotraceHR::StringViewWithStringArgumentsCategory<tracingStatus()>;
|
||||||
|
using StringCategory = NanotraceHR::StringCategory<tracingStatus()>;
|
||||||
using SourceLocation = Category::SourceLocation;
|
using SourceLocation = Category::SourceLocation;
|
||||||
using AsynchronousToken = Category::AsynchronousTokenType;
|
using AsynchronousToken = StringCategory::AsynchronousTokenType;
|
||||||
[[gnu::pure]] QMLDESIGNERCORE_EXPORT Category &category();
|
[[gnu::pure]] QMLDESIGNERCORE_EXPORT Category &category();
|
||||||
|
[[gnu::pure]] QMLDESIGNERCORE_EXPORT StringCategory &stringCategory();
|
||||||
} // namespace ModelTracing
|
} // namespace ModelTracing
|
||||||
|
|
||||||
namespace ProjectStorageTracing {
|
namespace ProjectStorageTracing {
|
||||||
|
Reference in New Issue
Block a user