42    case QMetaType::Type::UnknownType:
 
   44    case QMetaType::Type::Bool:
 
   45      return QObject::tr( 
"Boolean" );
 
   46    case QMetaType::Type::Int:
 
   47      return QObject::tr( 
"Integer (32 bit)" );
 
   48    case QMetaType::Type::UInt:
 
   49      return QObject::tr( 
"Integer (unsigned 32 bit)" );
 
   50    case QMetaType::Type::LongLong:
 
   51      return QObject::tr( 
"Integer (64 bit)" );
 
   52    case QMetaType::Type::ULongLong:
 
   53      return QObject::tr( 
"Integer (unsigned 64 bit)" );
 
   54    case QMetaType::Type::Double:
 
   55      return QObject::tr( 
"Decimal (double)" );
 
   56    case QMetaType::Type::QChar:
 
   57      return QObject::tr( 
"Character" );
 
   58    case QMetaType::Type::QVariantMap:
 
   59      return QObject::tr( 
"Map" );
 
   60    case QMetaType::Type::QVariantList:
 
   64        case QMetaType::Type::Int:
 
   65          return QObject::tr( 
"Integer List" );
 
   66        case QMetaType::Type::LongLong:
 
   67          return QObject::tr( 
"Integer (64 bit) List" );
 
   68        case QMetaType::Type::Double:
 
   69          return QObject::tr( 
"Decimal (double) List" );
 
   71          return QObject::tr( 
"List" );
 
   74    case QMetaType::Type::QString:
 
   75      return QObject::tr( 
"Text (string)" );
 
   76    case QMetaType::Type::QStringList:
 
   77      return QObject::tr( 
"String List" );
 
   78    case QMetaType::Type::QByteArray:
 
   79      return QObject::tr( 
"Binary Object (BLOB)" );
 
   80    case QMetaType::Type::QBitArray:
 
   81      return QObject::tr( 
"Bit Array" );
 
   82    case QMetaType::Type::QDate:
 
   83      return QObject::tr( 
"Date" );
 
   84    case QMetaType::Type::QTime:
 
   85      return QObject::tr( 
"Time" );
 
   86    case QMetaType::Type::QDateTime:
 
   87      return QObject::tr( 
"Date & Time" );
 
   88    case QMetaType::Type::QUrl:
 
   89      return QObject::tr( 
"URL" );
 
   90    case QMetaType::Type::QLocale:
 
   91      return QObject::tr( 
"Locale" );
 
   92    case QMetaType::Type::QRect:
 
   93    case QMetaType::Type::QRectF:
 
   94      return QObject::tr( 
"Rectangle" );
 
   95    case QMetaType::Type::QSize:
 
   96    case QMetaType::Type::QSizeF:
 
   97      return QObject::tr( 
"Size" );
 
   98    case QMetaType::Type::QLine:
 
   99    case QMetaType::Type::QLineF:
 
  100      return QObject::tr( 
"Line" );
 
  101    case QMetaType::Type::QPoint:
 
  102    case QMetaType::Type::QPointF:
 
  103      return QObject::tr( 
"Point" );
 
  104    case QMetaType::Type::QRegularExpression:
 
  105      return QObject::tr( 
"Regular Expression" );
 
  106    case QMetaType::Type::QVariantHash:
 
  107      return QObject::tr( 
"Hash" );
 
  108    case QMetaType::Type::QEasingCurve:
 
  109      return QObject::tr( 
"Easing Curve" );
 
  110    case QMetaType::Type::QUuid:
 
  111      return QObject::tr( 
"UUID" );
 
  112    case QMetaType::Type::QModelIndex:
 
  113    case QMetaType::Type::QPersistentModelIndex:
 
  114      return QObject::tr( 
"Model Index" );
 
  115    case QMetaType::Type::QFont:
 
  116      return QObject::tr( 
"Font" );
 
  117    case QMetaType::Type::QPixmap:
 
  118      return QObject::tr( 
"Pixmap" );
 
  119    case QMetaType::Type::QBrush:
 
  120      return QObject::tr( 
"Brush" );
 
  121    case QMetaType::Type::QColor:
 
  122      return QObject::tr( 
"Color" );
 
  123    case QMetaType::Type::QPalette:
 
  124      return QObject::tr( 
"Palette" );
 
  125    case QMetaType::Type::QImage:
 
  126      return QObject::tr( 
"Image" );
 
  127    case QMetaType::Type::QPolygon:
 
  128    case QMetaType::Type::QPolygonF:
 
  129      return QObject::tr( 
"Polygon" );
 
  130    case QMetaType::Type::QRegion:
 
  131      return QObject::tr( 
"Region" );
 
  132    case QMetaType::Type::QBitmap:
 
  133      return QObject::tr( 
"Bitmap" );
 
  134    case QMetaType::Type::QCursor:
 
  135      return QObject::tr( 
"Cursor" );
 
  136    case QMetaType::Type::QKeySequence:
 
  137      return QObject::tr( 
"Key Sequence" );
 
  138    case QMetaType::Type::QPen:
 
  139      return QObject::tr( 
"Pen" );
 
  140    case QMetaType::Type::QTextLength:
 
  141      return QObject::tr( 
"Text Length" );
 
  142    case QMetaType::Type::QTextFormat:
 
  143      return QObject::tr( 
"Text Format" );
 
  144    case QMetaType::Type::QMatrix4x4:
 
  145      return QObject::tr( 
"Matrix" );
 
  146    case QMetaType::Type::QTransform:
 
  147      return QObject::tr( 
"Transform" );
 
  148    case QMetaType::Type::QVector2D:
 
  149    case QMetaType::Type::QVector3D:
 
  150    case QMetaType::Type::QVector4D:
 
  151      return QObject::tr( 
"Vector" );
 
  152    case QMetaType::Type::QQuaternion:
 
  153      return QObject::tr( 
"Quaternion" );
 
  154    case QMetaType::Type::QIcon:
 
  155      return QObject::tr( 
"Icon" );
 
  156    case QMetaType::Type::QSizePolicy:
 
  157      return QObject::tr( 
"Size Policy" );
 
 
  173  ( void )silenceNullWarnings;
 
  176  if ( variant.isNull() || !variant.isValid() )
 
  179  switch ( variant.userType() )
 
  181    case QMetaType::Type::UnknownType:
 
  182    case QMetaType::Type::Bool:
 
  183    case QMetaType::Type::Int:
 
  184    case QMetaType::Type::UInt:
 
  185    case QMetaType::Type::LongLong:
 
  186    case QMetaType::Type::ULongLong:
 
  187    case QMetaType::Type::Double:
 
  188    case QMetaType::Type::QVariantMap:
 
  189    case QMetaType::Type::QVariantList:
 
  190    case QMetaType::Type::QStringList:
 
  191    case QMetaType::Type::QUrl:
 
  192    case QMetaType::Type::QLocale:
 
  193    case QMetaType::Type::QRegularExpression:
 
  194    case QMetaType::Type::QVariantHash:
 
  195    case QMetaType::Type::QEasingCurve:
 
  196    case QMetaType::Type::QModelIndex:
 
  197    case QMetaType::Type::QPersistentModelIndex:
 
  201    case QMetaType::Type::QDate:
 
  202      if ( variant.toDate().isNull() )
 
  204        if ( !silenceNullWarnings )
 
  206          QgsDebugError( QStringLiteral( 
"NULL QDateTime was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  211    case QMetaType::Type::QTime:
 
  212      if ( variant.toTime().isNull() )
 
  214        if ( !silenceNullWarnings )
 
  216          QgsDebugError( QStringLiteral( 
"NULL QTime was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  221    case QMetaType::Type::QDateTime:
 
  222      if ( variant.toDate().isNull() )
 
  224        if ( !silenceNullWarnings )
 
  226          QgsDebugError( QStringLiteral( 
"NULL QDate was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  231    case QMetaType::Type::QChar:
 
  232      if ( variant.toChar().isNull() )
 
  234        if ( !silenceNullWarnings )
 
  236          QgsDebugError( QStringLiteral( 
"NULL QChar was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  241    case QMetaType::Type::QString:
 
  242      if ( variant.toString().isNull() )
 
  244        if ( !silenceNullWarnings )
 
  246          QgsDebugError( QStringLiteral( 
"NULL QString was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  251    case QMetaType::Type::QByteArray:
 
  252      if ( variant.toByteArray().isNull() )
 
  254        if ( !silenceNullWarnings )
 
  256          QgsDebugError( QStringLiteral( 
"NULL QByteArray was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  261    case QMetaType::Type::QBitArray:
 
  262      if ( variant.toBitArray().isNull() )
 
  264        if ( !silenceNullWarnings )
 
  266          QgsDebugError( QStringLiteral( 
"NULL QBitArray was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  271    case QMetaType::Type::QRect:
 
  272      if ( variant.toRect().isNull() )
 
  274        if ( !silenceNullWarnings )
 
  276          QgsDebugError( QStringLiteral( 
"NULL QRect was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  281    case QMetaType::Type::QRectF:
 
  282      if ( variant.toRectF().isNull() )
 
  284        if ( !silenceNullWarnings )
 
  286          QgsDebugError( QStringLiteral( 
"NULL QRectF was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  291    case QMetaType::Type::QSize:
 
  292      if ( variant.toSize().isNull() )
 
  294        if ( !silenceNullWarnings )
 
  296          QgsDebugError( QStringLiteral( 
"NULL QSize was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  301    case QMetaType::Type::QSizeF:
 
  302      if ( variant.toSizeF().isNull() )
 
  304        if ( !silenceNullWarnings )
 
  306          QgsDebugError( QStringLiteral( 
"NULL QSizeF was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  311    case QMetaType::Type::QLine:
 
  312      if ( variant.toLine().isNull() )
 
  314        if ( !silenceNullWarnings )
 
  316          QgsDebugError( QStringLiteral( 
"NULL QLine was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  321    case QMetaType::Type::QLineF:
 
  322      if ( variant.toLineF().isNull() )
 
  324        if ( !silenceNullWarnings )
 
  326          QgsDebugError( QStringLiteral( 
"NULL QLineF was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  331    case QMetaType::Type::QPoint:
 
  332      if ( variant.toPoint().isNull() )
 
  334        if ( !silenceNullWarnings )
 
  336          QgsDebugError( QStringLiteral( 
"NULL QPoint was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  341    case QMetaType::Type::QPointF:
 
  342      if ( variant.toPointF().isNull() )
 
  344        if ( !silenceNullWarnings )
 
  346          QgsDebugError( QStringLiteral( 
"NULL QPointF was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  351    case QMetaType::Type::QUuid:
 
  352      if ( variant.toUuid().isNull() )
 
  354        if ( !silenceNullWarnings )
 
  356          QgsDebugError( QStringLiteral( 
"NULL QUuid was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  361    case QMetaType::Type::QPixmap:
 
  362      if ( variant.value< QPixmap >().isNull() )
 
  364        if ( !silenceNullWarnings )
 
  366          QgsDebugError( QStringLiteral( 
"NULL QPixmap was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  371    case QMetaType::Type::QImage:
 
  372      if ( variant.value< QImage >().isNull() )
 
  374        if ( !silenceNullWarnings )
 
  376          QgsDebugError( QStringLiteral( 
"NULL QImage was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  381    case QMetaType::Type::QRegion:
 
  382      if ( variant.value< QRegion >().isNull() )
 
  384        if ( !silenceNullWarnings )
 
  386          QgsDebugError( QStringLiteral( 
"NULL QRegion was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  391    case QMetaType::Type::QBitmap:
 
  392      if ( variant.value< QBitmap >().isNull() )
 
  394        if ( !silenceNullWarnings )
 
  396          QgsDebugError( QStringLiteral( 
"NULL QBitmap was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  401    case QMetaType::Type::QIcon:
 
  402      if ( variant.value< QIcon >().isNull() )
 
  404        if ( !silenceNullWarnings )
 
  406          QgsDebugError( QStringLiteral( 
"NULL QIcon was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  411    case QMetaType::Type::QVector2D:
 
  412      if ( variant.value< QVector2D >().isNull() )
 
  414        if ( !silenceNullWarnings )
 
  416          QgsDebugError( QStringLiteral( 
"NULL QVector2D was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  421    case QMetaType::Type::QVector3D:
 
  422      if ( variant.value< QVector3D >().isNull() )
 
  424        if ( !silenceNullWarnings )
 
  426          QgsDebugError( QStringLiteral( 
"NULL QVector3D was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  431    case QMetaType::Type::QVector4D:
 
  432      if ( variant.value< QVector4D >().isNull() )
 
  434        if ( !silenceNullWarnings )
 
  436          QgsDebugError( QStringLiteral( 
"NULL QVector4D was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  441    case QMetaType::Type::QQuaternion:
 
  442      if ( variant.value< QQuaternion >().isNull() )
 
  444        if ( !silenceNullWarnings )
 
  446          QgsDebugError( QStringLiteral( 
"NULL QQuaternion was stored in a QVariant -- stop it! Always use an invalid QVariant() instead." ) );
 
  452    case QMetaType::Type::QColor:
 
  453    case QMetaType::Type::QFont:
 
  454    case QMetaType::Type::QBrush:
 
  455    case QMetaType::Type::QPolygon:
 
  456    case QMetaType::Type::QPalette:
 
  457    case QMetaType::Type::QCursor:
 
  458    case QMetaType::Type::QKeySequence:
 
  459    case QMetaType::Type::QPen:
 
  460    case QMetaType::Type::QTextLength:
 
  461    case QMetaType::Type::QPolygonF:
 
  462    case QMetaType::Type::QTextFormat:
 
  463    case QMetaType::Type::QTransform:
 
  464    case QMetaType::Type::QMatrix4x4:
 
  465    case QMetaType::Type::QSizePolicy:
 
  466    case QMetaType::Type::User:
 
 
  507    case QMetaType::Bool:
 
  509    case QMetaType::UInt:
 
  510    case QMetaType::LongLong:
 
  511    case QMetaType::ULongLong:
 
  512    case QMetaType::Double:
 
  513    case QMetaType::QChar:
 
  514    case QMetaType::QVariantMap:
 
  515    case QMetaType::QVariantList:
 
  516    case QMetaType::QString:
 
  517    case QMetaType::QStringList:
 
  518    case QMetaType::QByteArray:
 
  519    case QMetaType::QBitArray:
 
  520    case QMetaType::QDate:
 
  521    case QMetaType::QTime:
 
  522    case QMetaType::QDateTime:
 
  523    case QMetaType::QUrl:
 
  524    case QMetaType::QLocale:
 
  525    case QMetaType::QRect:
 
  526    case QMetaType::QRectF:
 
  527    case QMetaType::QSize:
 
  528    case QMetaType::QSizeF:
 
  529    case QMetaType::QLine:
 
  530    case QMetaType::QLineF:
 
  531    case QMetaType::QPoint:
 
  532    case QMetaType::QPointF:
 
  533    case QMetaType::QRegularExpression:
 
  534    case QMetaType::QVariantHash:
 
  535    case QMetaType::QEasingCurve:
 
  536    case QMetaType::QUuid:
 
  537    case QMetaType::QModelIndex:
 
  538    case QMetaType::QPersistentModelIndex:
 
  539    case QMetaType::QFont:
 
  540    case QMetaType::QPixmap:
 
  541    case QMetaType::QBrush:
 
  542    case QMetaType::QColor:
 
  543    case QMetaType::QPalette:
 
  544    case QMetaType::QImage:
 
  545    case QMetaType::QPolygon:
 
  546    case QMetaType::QRegion:
 
  547    case QMetaType::QBitmap:
 
  548    case QMetaType::QCursor:
 
  549    case QMetaType::QKeySequence:
 
  550    case QMetaType::QPen:
 
  551    case QMetaType::QTextLength:
 
  552    case QMetaType::QTextFormat:
 
  553    case QMetaType::QTransform:
 
  554    case QMetaType::QMatrix4x4:
 
  555    case QMetaType::QVector2D:
 
  556    case QMetaType::QVector3D:
 
  557    case QMetaType::QVector4D:
 
  558    case QMetaType::QQuaternion:
 
  559    case QMetaType::QPolygonF:
 
  560    case QMetaType::QIcon:
 
  561    case QMetaType::QSizePolicy:
 
  562    case QMetaType::UnknownType:
 
  563    case QMetaType::User:
 
  564      return static_cast< QVariant::Type 
>( metaType );
 
  568    case QMetaType::Long:
 
  569      return QVariant::Type::LongLong;
 
  571    case QMetaType::ULong:
 
  572      return QVariant::Type::ULongLong;
 
  574    case QMetaType::Char:
 
  575#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 
  576    case QMetaType::Char16:
 
  577    case QMetaType::Char32:
 
  579    case QMetaType::Short:
 
  580    case QMetaType::SChar:
 
  581      return QVariant::Type::Int;
 
  583    case QMetaType::UShort:
 
  584    case QMetaType::UChar:
 
  585      return QVariant::Type::UInt;
 
  587    case QMetaType::Float:
 
  588#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) 
  589    case QMetaType::Float16:
 
  591      return QVariant::Type::Double;
 
  594    case QMetaType::Nullptr:
 
  595    case QMetaType::QCborSimpleType:
 
  596    case QMetaType::Void:
 
  597    case QMetaType::VoidStar:
 
  598    case QMetaType::QVariant:
 
  599    case QMetaType::QJsonValue:
 
  600    case QMetaType::QJsonObject:
 
  601    case QMetaType::QJsonArray:
 
  602    case QMetaType::QJsonDocument:
 
  603    case QMetaType::QCborValue:
 
  604    case QMetaType::QCborArray:
 
  605    case QMetaType::QCborMap:
 
  606    case QMetaType::QObjectStar:
 
  607#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 
  608    case QMetaType::QVariantPair:
 
  610    case QMetaType::QByteArrayList:
 
  611    case QMetaType::QColorSpace:
 
  618  return QVariant::Type::UserType;