Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. How to Seperate QVariantMap values into individual elements
Forum Updated to NodeBB v4.3 + New Features

How to Seperate QVariantMap values into individual elements

Scheduled Pinned Locked Moved Solved QML and Qt Quick
8 Posts 3 Posters 1.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    Praveen.Illa
    wrote on last edited by
    #1

    Hi All,

    I have a QVariantMap map =
    (QVariant(QVariantList, (QVariant(QString, "1"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "6"), QVariant(QString, "12"), QVariant(QString, "4"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "6"), QVariant(QString, "14"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "8"), QVariant(QString, "14"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "9"), QVariant(QString, "16"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "10"), QVariant(QString, "16"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "11"), QVariant(QString, "18"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "12"), QVariant(QString, "20"))), QVariant(QVariantList, (QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "14"), QVariant(QString, "24"))))

    How can I seperate the above data into QVariantList and to individual values.

    jsulmJ 1 Reply Last reply
    0
    • P Praveen.Illa

      Hi All,

      I have a QVariantMap map =
      (QVariant(QVariantList, (QVariant(QString, "1"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "6"), QVariant(QString, "12"), QVariant(QString, "4"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "6"), QVariant(QString, "14"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "8"), QVariant(QString, "14"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "9"), QVariant(QString, "16"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "10"), QVariant(QString, "16"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "11"), QVariant(QString, "18"))), QVariant(QVariantList, (QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "12"), QVariant(QString, "20"))), QVariant(QVariantList, (QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "14"), QVariant(QString, "24"))))

      How can I seperate the above data into QVariantList and to individual values.

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @Praveen-Illa From documentation:

      typedef QVariantMap
      
      Synonym for QMap<QString, QVariant>.
      

      If you want to know how to use QMap: https://doc.qt.io/qt-5/qmap.html

      P 1 Reply Last reply
      0
      • jsulmJ jsulm

        @Praveen-Illa From documentation:

        typedef QVariantMap
        
        Synonym for QMap<QString, QVariant>.
        

        If you want to know how to use QMap: https://doc.qt.io/qt-5/qmap.html

        P Offline
        P Offline
        Praveen.Illa
        wrote on last edited by
        #3

        @jsulm - Thanks for Quick response.
        I have used QMapIterator as below
        QMapIterator<QString, QVariant> i(map);
        while (i.hasNext())
        {
        i.next();
        qDebug() << i.key() << ": " << i.value();
        }
        The output is Key : Value
        "Period 1" : QVariant(QVariantList, (QVariant(QString, "1"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "6"), QVariant(QString, "12"), QVariant(QString, "4")))

        Now, again I need to seperate the value part to individual QStrings. How can I do that ??

        jsulmJ 2 Replies Last reply
        0
        • P Praveen.Illa

          @jsulm - Thanks for Quick response.
          I have used QMapIterator as below
          QMapIterator<QString, QVariant> i(map);
          while (i.hasNext())
          {
          i.next();
          qDebug() << i.key() << ": " << i.value();
          }
          The output is Key : Value
          "Period 1" : QVariant(QVariantList, (QVariant(QString, "1"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "6"), QVariant(QString, "12"), QVariant(QString, "4")))

          Now, again I need to seperate the value part to individual QStrings. How can I do that ??

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #4
          This post is deleted!
          1 Reply Last reply
          0
          • P Praveen.Illa

            @jsulm - Thanks for Quick response.
            I have used QMapIterator as below
            QMapIterator<QString, QVariant> i(map);
            while (i.hasNext())
            {
            i.next();
            qDebug() << i.key() << ": " << i.value();
            }
            The output is Key : Value
            "Period 1" : QVariant(QVariantList, (QVariant(QString, "1"), QVariant(QString, "1"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "0"), QVariant(QString, "1"), QVariant(QString, "6"), QVariant(QString, "12"), QVariant(QString, "4")))

            Now, again I need to seperate the value part to individual QStrings. How can I do that ??

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #5

            @Praveen-Illa So, your value is QVariantList? Then you can simply iterate over the list as usual.

            typedef QVariantList
            
            Synonym for QList<QVariant>.
            
            P 1 Reply Last reply
            0
            • jsulmJ jsulm

              @Praveen-Illa So, your value is QVariantList? Then you can simply iterate over the list as usual.

              typedef QVariantList
              
              Synonym for QList<QVariant>.
              
              P Offline
              P Offline
              Praveen.Illa
              wrote on last edited by
              #6

              @jsulm
              I have tried like below, but getting error " error: error: conversion from ‘const QVariant’ to non-scalar type ‘QVariantList {aka QList<QVariant>}’ requested"

              QMapIterator<QString, QVariant> i(map);
              while (i.hasNext())
              {
              i.next();
              qDebug() << i.key() << ": " << i.value();
              QVariantList list = i.value();
              }

              Could you please suggest ?

              KroMignonK 1 Reply Last reply
              0
              • P Praveen.Illa

                @jsulm
                I have tried like below, but getting error " error: error: conversion from ‘const QVariant’ to non-scalar type ‘QVariantList {aka QList<QVariant>}’ requested"

                QMapIterator<QString, QVariant> i(map);
                while (i.hasNext())
                {
                i.next();
                qDebug() << i.key() << ": " << i.value();
                QVariantList list = i.value();
                }

                Could you please suggest ?

                KroMignonK Offline
                KroMignonK Offline
                KroMignon
                wrote on last edited by KroMignon
                #7

                @Praveen-Illa said in How to Seperate QVariantMap values into individual elements:

                QVariantList list = i.value();

                your map is an instance of QVariantMap which is a typedef of QMap<QString, QVariant>
                This means i.value() is a QVariant.

                Now you know that is variant holds a QVariantList (which is a typedef of QList<QVariant>):

                if (i.value().canConvert<QVariantList>()) {
                    QSequentialIterable iterable = i.value().value<QSequentialIterable>();
                     foreach (const QVariant &v, iterable) {
                         qDebug() << v;
                     }
                }
                

                ==> Read documentation for more details: =>https://doc.qt.io/qt-5/qvariant.html#canConvert

                i.value() will returns what it is ==> a QVariant.
                To get the holded value you have to "cast" ==> i.value().value<QVariantList>();

                It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                P 1 Reply Last reply
                2
                • KroMignonK KroMignon

                  @Praveen-Illa said in How to Seperate QVariantMap values into individual elements:

                  QVariantList list = i.value();

                  your map is an instance of QVariantMap which is a typedef of QMap<QString, QVariant>
                  This means i.value() is a QVariant.

                  Now you know that is variant holds a QVariantList (which is a typedef of QList<QVariant>):

                  if (i.value().canConvert<QVariantList>()) {
                      QSequentialIterable iterable = i.value().value<QSequentialIterable>();
                       foreach (const QVariant &v, iterable) {
                           qDebug() << v;
                       }
                  }
                  

                  ==> Read documentation for more details: =>https://doc.qt.io/qt-5/qvariant.html#canConvert

                  i.value() will returns what it is ==> a QVariant.
                  To get the holded value you have to "cast" ==> i.value().value<QVariantList>();

                  P Offline
                  P Offline
                  Praveen.Illa
                  wrote on last edited by
                  #8

                  @KroMignon and @jsulm - Thank you both for your inputs and it was working now.

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved