Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. how to call QVariant::convert
Qt 6.11 is out! See what's new in the release blog

how to call QVariant::convert

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 3 Posters 2.0k Views 1 Watching
  • 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.
  • JonBJ JonB

    @LeLev
    You can't QVariant::convert() a const QVariant & --- it changes it!! Make the parameter non-const or work on a copy or similar.

    ODБOïO Offline
    ODБOïO Offline
    ODБOï
    wrote on last edited by
    #3

    @JonB hi,
    thanks for your answer,
    should i create a local variable like this ?

    void Client::listUpdated(const QVariant &value){
        QVariant tmpValue = value;
        if(value.canConvert(QVariant::List) && tmpValue .convert(QVariant::List) ){
          setList(value.toList());
        }
    }
    
    J.HilkJ 1 Reply Last reply
    0
    • ODБOïO ODБOï

      @JonB hi,
      thanks for your answer,
      should i create a local variable like this ?

      void Client::listUpdated(const QVariant &value){
          QVariant tmpValue = value;
          if(value.canConvert(QVariant::List) && tmpValue .convert(QVariant::List) ){
            setList(value.toList());
          }
      }
      
      J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #4

      @LeLev in your case, I would drop it all together

      canConvert (QVariant::List) + toList() is in essence the same as convert(QVariant::List) with the difference that convert modifies itself and toList returns a modified Value


      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      ODБOïO 1 Reply Last reply
      1
      • J.HilkJ J.Hilk

        @LeLev in your case, I would drop it all together

        canConvert (QVariant::List) + toList() is in essence the same as convert(QVariant::List) with the difference that convert modifies itself and toList returns a modified Value

        ODБOïO Offline
        ODБOïO Offline
        ODБOï
        wrote on last edited by
        #5

        @J-Hilk hi
        Thx for the suggestion.
        If i understand correctly, this will do ?

        void Client::listUpdated(const QVariant &value){
            QVariant tmpValue = value;
            if(tmpValue.canConvert(QVariant::List) && tmpValue.convert(QVariant::List) ){
              setList(tmpValue );
            }
        }
        
        J.HilkJ 1 Reply Last reply
        0
        • ODБOïO ODБOï

          @J-Hilk hi
          Thx for the suggestion.
          If i understand correctly, this will do ?

          void Client::listUpdated(const QVariant &value){
              QVariant tmpValue = value;
              if(tmpValue.canConvert(QVariant::List) && tmpValue.convert(QVariant::List) ){
                setList(tmpValue );
              }
          }
          
          J.HilkJ Offline
          J.HilkJ Offline
          J.Hilk
          Moderators
          wrote on last edited by J.Hilk
          #6

          @LeLev it should, but I suggested:

          void Client::listUpdated(const QVariant &value){
              if(value.canConvert(QVariant::List)  ){
                setList(value.toList());
              }
          }
          

          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


          Q: What's that?
          A: It's blue light.
          Q: What does it do?
          A: It turns blue.

          ODБOïO 1 Reply Last reply
          1
          • J.HilkJ J.Hilk

            @LeLev it should, but I suggested:

            void Client::listUpdated(const QVariant &value){
                if(value.canConvert(QVariant::List)  ){
                  setList(value.toList());
                }
            }
            
            ODБOïO Offline
            ODБOïO Offline
            ODБOï
            wrote on last edited by
            #7

            @J-Hilk but if i understand this part of doc correctly, they say i have to use canConvert And convert, because even if "canConvert" returns "true", "convert" can still return "false". Did i get it wrong?

            J.HilkJ 1 Reply Last reply
            0
            • ODБOïO ODБOï

              @J-Hilk but if i understand this part of doc correctly, they say i have to use canConvert And convert, because even if "canConvert" returns "true", "convert" can still return "false". Did i get it wrong?

              J.HilkJ Offline
              J.HilkJ Offline
              J.Hilk
              Moderators
              wrote on last edited by
              #8

              @LeLev in principle, yes,
              but if toList fails, you get an empty list. If you want to, you can check for that as well

              void listUpdated(const QVariant &value){
                  if(auto list = value.toList(); value.canConvert(QVariant::List) && !list.isEmpty()){
                    setList(list);
                  }
              }
              

              Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


              Q: What's that?
              A: It's blue light.
              Q: What does it do?
              A: It turns blue.

              ODБOïO JonBJ 2 Replies Last reply
              1
              • J.HilkJ J.Hilk

                @LeLev in principle, yes,
                but if toList fails, you get an empty list. If you want to, you can check for that as well

                void listUpdated(const QVariant &value){
                    if(auto list = value.toList(); value.canConvert(QVariant::List) && !list.isEmpty()){
                      setList(list);
                    }
                }
                
                ODБOïO Offline
                ODБOïO Offline
                ODБOï
                wrote on last edited by
                #9

                @J-Hilk Thank you for clarifying that

                1 Reply Last reply
                0
                • J.HilkJ J.Hilk

                  @LeLev in principle, yes,
                  but if toList fails, you get an empty list. If you want to, you can check for that as well

                  void listUpdated(const QVariant &value){
                      if(auto list = value.toList(); value.canConvert(QVariant::List) && !list.isEmpty()){
                        setList(list);
                      }
                  }
                  
                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by JonB
                  #10

                  @J-Hilk said in how to call QVariant::convert:

                  if(auto list = value.toList(); value.canConvert(QVariant::List) && !list.isEmpty()){

                  I know it works, but ... really? :) First call toList() on value, then afterward check whether it could convert. Are you in some backward time-warp? ;-)

                  J.HilkJ 1 Reply Last reply
                  2
                  • JonBJ JonB

                    @J-Hilk said in how to call QVariant::convert:

                    if(auto list = value.toList(); value.canConvert(QVariant::List) && !list.isEmpty()){

                    I know it works, but ... really? :) First call toList() on value, then afterward check whether it could convert. Are you in some backward time-warp? ;-)

                    J.HilkJ Offline
                    J.HilkJ Offline
                    J.Hilk
                    Moderators
                    wrote on last edited by
                    #11

                    @JonB fair enough, is this particular case, 2nd if case inside the first one would probably be more sensible :D


                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                    Q: What's that?
                    A: It's blue light.
                    Q: What does it do?
                    A: It turns blue.

                    JonBJ 1 Reply Last reply
                    1
                    • J.HilkJ J.Hilk

                      @JonB fair enough, is this particular case, 2nd if case inside the first one would probably be more sensible :D

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by JonB
                      #12

                      @J-Hilk
                      It made me smile. I have never declared a variable inside an if ( condition. Witches' brew :) I can sort of see you'd have to do it your way round to achieve it. That's what you get for putting a ; inside an if ( :D Personally I'm not going to call toList() till after convert() has cleared me to do it.

                      J.HilkJ 1 Reply Last reply
                      1
                      • JonBJ JonB

                        @J-Hilk
                        It made me smile. I have never declared a variable inside an if ( condition. Witches' brew :) I can sort of see you'd have to do it your way round to achieve it. That's what you get for putting a ; inside an if ( :D Personally I'm not going to call toList() till after convert() has cleared me to do it.

                        J.HilkJ Offline
                        J.HilkJ Offline
                        J.Hilk
                        Moderators
                        wrote on last edited by
                        #13

                        @JonB you mean:

                        void Client::listUpdated(QVariant value){
                            if(value.canConvert(QVariant::List) && value.convert(QVariant::List) ){
                              setList(value);
                            }
                        }
                        

                        I would agree, sometimes it's just simpler to pass by value and rely on the copy on write functionality of Qt-classes 😉


                        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                        Q: What's that?
                        A: It's blue light.
                        Q: What does it do?
                        A: It turns blue.

                        JonBJ 1 Reply Last reply
                        1
                        • J.HilkJ J.Hilk

                          @JonB you mean:

                          void Client::listUpdated(QVariant value){
                              if(value.canConvert(QVariant::List) && value.convert(QVariant::List) ){
                                setList(value);
                              }
                          }
                          

                          I would agree, sometimes it's just simpler to pass by value and rely on the copy on write functionality of Qt-classes 😉

                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by JonB
                          #14

                          @J-Hilk
                          Well, no, you/someone said earlier we don't need to modify the QVariant value input parameter. You/someone said value.toList() was OK on a const. But we ought verify it's convertible before doing so/to distinguish from convertible-but-empty list. So I just thought (untested):

                          if (value.canConvert(QVariant::List))
                              setList(value.toList());
                          

                          ?

                          Oh, that's what you started with? Yeah I see, I read that link now. Well, toList() is not going to fail here after canConvert() :)

                          Anyway, that wasn't really my amusement. It was calling toList() and then calling canConvert(), as far as I can see in order to fit it into a variable-defining if(. There's no big point here from me, I get now that the canConvert/convert() functions aren't the same as each other.

                          1 Reply Last reply
                          1

                          • Login

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