Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Copying the content of int array to QString
Forum Updated to NodeBB v4.3 + New Features

Copying the content of int array to QString

Scheduled Pinned Locked Moved Solved Mobile and Embedded
12 Posts 4 Posters 9.4k Views 3 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.
  • V Offline
    V Offline
    vivekyuvan
    wrote on last edited by vivekyuvan
    #3

    hi@sierdzio I have problem with convert int array to QString . I just compiled my own test code

    void Array_Data_emit_Form1::Raw_Data_Initialization()
    
    {
       unsigned int a[5]={1,2,3,-4,5};
        QString My_String;
       for(int i=0; i<5; i++)
        {
           My_String=a[i];
        }
    qDebug()<<"My_String datas:"<<My_String;
    emit SEND_Array_To_Mainw(My_String);
    }
    

    This is my connect signal in mainwindow.cpp

    ```
    

    connect(data_connect,SIGNAL(SEND_Array_To_Mainw(QString)),this,SLOT(Show_Data_to_Window(QString)));

    
    
    This is my Receiver Slot in mainwindow.cpp
    
    

    void MainWindow::Show_Data_to_Window(QString S_data)
    {

    qDebug() <<"Data Received"<<S_data.size()<<S_data;
    

    }

    
    The Out put I saw in Console
    
    My_String datas: "" 
    Data Received 1 "" 
    My_String datas: "" 
    Data Received 1 ""![0_1506504541397_Console_output.png](https://ddgobkiprc33d.cloudfront.net/41b66b87-8b0c-4c1e-bbf2-d298ff3882f3.png) 
    
    
    
    
    
    What I expect is My array data will convert to String 
    In Receiver slot 
    
    the array data must be converted to string like 1 2 3 -4 5
    
    
    Help me to resolve this issue  Thanks in advance
    J.HilkJ 1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #4

      @vivekyuvan said in Copying the content of int array to QString:

      unsigned int a[5]={1,2,3,-4,5};
      QString My_String;
      for(int i=0; i<5; i++)
      {
      My_String=a[i];
      }

      You replace My_String each time in this loop. You probably want something like this instead:

      My_String+=QString::number(a[i]);
      

      (Z(:^

      1 Reply Last reply
      5
      • V vivekyuvan

        hi@sierdzio I have problem with convert int array to QString . I just compiled my own test code

        void Array_Data_emit_Form1::Raw_Data_Initialization()
        
        {
           unsigned int a[5]={1,2,3,-4,5};
            QString My_String;
           for(int i=0; i<5; i++)
            {
               My_String=a[i];
            }
        qDebug()<<"My_String datas:"<<My_String;
        emit SEND_Array_To_Mainw(My_String);
        }
        

        This is my connect signal in mainwindow.cpp

        ```
        

        connect(data_connect,SIGNAL(SEND_Array_To_Mainw(QString)),this,SLOT(Show_Data_to_Window(QString)));

        
        
        This is my Receiver Slot in mainwindow.cpp
        
        

        void MainWindow::Show_Data_to_Window(QString S_data)
        {

        qDebug() <<"Data Received"<<S_data.size()<<S_data;
        

        }

        
        The Out put I saw in Console
        
        My_String datas: "" 
        Data Received 1 "" 
        My_String datas: "" 
        Data Received 1 ""![0_1506504541397_Console_output.png](https://ddgobkiprc33d.cloudfront.net/41b66b87-8b0c-4c1e-bbf2-d298ff3882f3.png) 
        
        
        
        
        
        What I expect is My array data will convert to String 
        In Receiver slot 
        
        the array data must be converted to string like 1 2 3 -4 5
        
        
        Help me to resolve this issue  Thanks in advance
        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by J.Hilk
        #5

        @vivekyuvan what you need is to convert the raw int to a QStirng. Lucky for you QString has a method that does that for you

        do the following change:

        QString My_String;
           for(int i=0; i<5; i++)
            {
               My_String.append(QString::number(a[i]));
            }
        

        and you should be fine.

        Edit: @sierdzio was a bit faster x) but great minds think alike *cough*


        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.

        1 Reply Last reply
        3
        • V Offline
          V Offline
          vivekyuvan
          wrote on last edited by vivekyuvan
          #6

          hi@sierdzio and @J-Hilk Thanks for the reply. I tried both method but no luck

          this is what my output in console window.

          My_String datas: "12342949672925" 
          Data Received 14 "12342949672925"
          

          here is the change in my Sending slot:

          void Array_Data_emit_Form1::Raw_Data_Initialization()
          
          {
              
              unsigned int a[5]={1,2,3,-4,5};
              QString My_String;
             for(int i=0; i<5; i++)
              {
              
               //My_String=a[i];
               My_String+=QString::number(a[i])
                //My_String.append(QString::number(a[i]));
          
          }
          qDebug()<<"My_String datas:"<<My_String;
          emit SEND_Array_To_Mainw(My_String);
          }
          

          0_1506505800575_Console_Output2.png

          J.HilkJ 1 Reply Last reply
          0
          • sierdzioS Offline
            sierdzioS Offline
            sierdzio
            Moderators
            wrote on last edited by
            #7

            If you want spaces between the numbers... insert them :-)

            My_String+=QString::number(a[i]) + " ";
            

            Also, another issue:

            unsigned int a[5]={1,2,3,-4,5};
            

            "unsigned" type will not store -4. It's actually quite surprising that the compiler does not throw an error here.

            (Z(:^

            kshegunovK 1 Reply Last reply
            3
            • V Offline
              V Offline
              vivekyuvan
              wrote on last edited by
              #8

              @sierdzio thank you. Sorry for the silly mistake that made by me. I just changed datatype as signed integer now its working i got 123-45. now my problem solved.

              ```
              

              signed int a[5]={1,2,3,-4,5};

              1 Reply Last reply
              1
              • V vivekyuvan

                hi@sierdzio and @J-Hilk Thanks for the reply. I tried both method but no luck

                this is what my output in console window.

                My_String datas: "12342949672925" 
                Data Received 14 "12342949672925"
                

                here is the change in my Sending slot:

                void Array_Data_emit_Form1::Raw_Data_Initialization()
                
                {
                    
                    unsigned int a[5]={1,2,3,-4,5};
                    QString My_String;
                   for(int i=0; i<5; i++)
                    {
                    
                     //My_String=a[i];
                     My_String+=QString::number(a[i])
                      //My_String.append(QString::number(a[i]));
                
                }
                qDebug()<<"My_String datas:"<<My_String;
                emit SEND_Array_To_Mainw(My_String);
                }
                

                0_1506505800575_Console_Output2.png

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

                @vivekyuvan it is doing exactly what yopu tell it to,
                unsigned int can be anything between 0 and 4,294,967,295 : -4 therefore => 4,294,967,292


                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.

                1 Reply Last reply
                2
                • sierdzioS sierdzio

                  If you want spaces between the numbers... insert them :-)

                  My_String+=QString::number(a[i]) + " ";
                  

                  Also, another issue:

                  unsigned int a[5]={1,2,3,-4,5};
                  

                  "unsigned" type will not store -4. It's actually quite surprising that the compiler does not throw an error here.

                  kshegunovK Offline
                  kshegunovK Offline
                  kshegunov
                  Moderators
                  wrote on last edited by
                  #10

                  @sierdzio said in Copying the content of int array to QString:

                  It's actually quite surprising that the compiler does not throw an error here.

                  There's no error from the compiler's point of view, at best it should be a warning. There's no significant difference between signed and unsigned numbers aside from our interpretation of the data, so the compiler has no reason to complain. If you consider this:

                  unsigned short x = -3; // 0xFFFD
                  unsigned short y = 5;  // 0x0005
                  
                  short z = x + y;  // = 0xFFFD + 0x0005 = 0x10002 -> (due to truncation from overflow) 0x0002 == 2
                  short z2 = x - y; // = 0xFFFD - 0x0005 = 0xFFFD + 0xFFFB = 0x1FFF8 -> (due to truncation from overflow) 0xFFF8 == -8
                  

                  It's perfectly valid from the compiler's point of view, it's just a hell of a confusing way to do things and can get you in big trouble whenever comparing is involved. ;)

                  Read and abide by the Qt Code of Conduct

                  1 Reply Last reply
                  2
                  • sierdzioS Offline
                    sierdzioS Offline
                    sierdzio
                    Moderators
                    wrote on last edited by
                    #11

                    Yes, thanks for the explanation.

                    My intuition here was that since we clearly and openly want unsigned, the compiler will be clever enough to point out that "-4" is likely a bug. With gcc and clang being pretty clever about a lot of things (like pointing out signed/ unsigned mismatches in if statements etc.) I assumed it would shoot some (at least) warning here.

                    Actually, maybe it did print a warning but OP ignored it, who knows.

                    (Z(:^

                    kshegunovK 1 Reply Last reply
                    0
                    • sierdzioS sierdzio

                      Yes, thanks for the explanation.

                      My intuition here was that since we clearly and openly want unsigned, the compiler will be clever enough to point out that "-4" is likely a bug. With gcc and clang being pretty clever about a lot of things (like pointing out signed/ unsigned mismatches in if statements etc.) I assumed it would shoot some (at least) warning here.

                      Actually, maybe it did print a warning but OP ignored it, who knows.

                      kshegunovK Offline
                      kshegunovK Offline
                      kshegunov
                      Moderators
                      wrote on last edited by kshegunov
                      #12

                      It may not be a bug, that's what one could use, albeit there are better ways, to get the upper limit of the unsigned type.

                      unsigned maxint = -1; // And voila we have the UINT_MAX
                      

                      Although, I agree that perhaps a warning is in order, this doesn't seem to be the case with g++ (7.2.x) on my machine. The above line will not generate even a warning and I do compile with -Wall.

                      like pointing out signed/ unsigned mismatches in if statements etc.

                      This is when it comes to comparisons, because due to representation (and integral promotion) -1 is the biggest number there possibly can be in a mixed signed-unsigned comparison.

                      Actually, maybe it did print a warning but OP ignored it, who knows.

                      It'd depend on the actual compiler, but it might not have warned him.

                      Read and abide by the Qt Code of Conduct

                      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