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. Why does not QListWidget sort correctly?
Forum Updated to NodeBB v4.3 + New Features

Why does not QListWidget sort correctly?

Scheduled Pinned Locked Moved Solved General and Desktop
7 Posts 4 Posters 778 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.
  • Q Offline
    Q Offline
    Qingshui Kong
    wrote on 20 May 2020, 07:35 last edited by
    #1

    Hi everybody,

    Could somebody give me some help?
    I want to use QListWidget sortItems() function. I enabled sortingEnable. But I don't think the result is correct.
    If I input items 1, 2, 1152, the result will be 1, 1152, 2. But I think the result should be 1, 2, 1152.

    And if I test this code,
    if("1" == "1152")
    {
    qDebug() << "'1' == '1152'";
    }
    else if("1" > "1152")
    {
    qDebug() << "'1' > '1152'";
    }
    else
    {
    qDebug() << "'1' < '1152'";
    }
    if("2" == "1152")
    {
    qDebug() << "'2' == '1152'";
    }
    else if("2" > "1152")
    {
    qDebug() << "'2' > '1152'";
    }
    else
    {
    qDebug() << "'2' < '1152'";
    }
    The output is
    '1' < '1152'
    '2' < '1152'

    I think this is right.

    So could somebody give me some advice?
    Thanks in advance.

    1 Reply Last reply
    0
    • B Offline
      B Offline
      Bonnie
      wrote on 20 May 2020, 07:48 last edited by Bonnie
      #2

      Do you know that you are comparing their memory addresses?
      If you want to test the comparing, you should write like this

      if(QString("1") == QString("1152"))
      

      And the result is

      '1' < '1152'
      '2' > '1152'
      

      That is how string comparision works.
      It will not compare the number value...

      One workaround to this is that do not use setText, but

      item->setData(Qt::DisplayRole, 1151);
      
      Q 1 Reply Last reply 20 May 2020, 08:34
      4
      • B Bonnie
        20 May 2020, 07:48

        Do you know that you are comparing their memory addresses?
        If you want to test the comparing, you should write like this

        if(QString("1") == QString("1152"))
        

        And the result is

        '1' < '1152'
        '2' > '1152'
        

        That is how string comparision works.
        It will not compare the number value...

        One workaround to this is that do not use setText, but

        item->setData(Qt::DisplayRole, 1151);
        
        Q Offline
        Q Offline
        Qingshui Kong
        wrote on 20 May 2020, 08:34 last edited by
        #3

        @Bonnie Thank you very much.
        You explained how string comparision works. That is correct. And I tested as you said. But in my opinion, I still think they should compare the length of each string. Let it alone.

        At first my code is
        ui->listWidget->addItem(QString::number(nNum));
        ui->listWidget->sortItems();
        It works. I can see the num in the listwidget.

        But after I changed the code to
        QListWidgetItem item;
        item.setData(Qt::DisplayRole, nNum);
        ui->listWidget->addItem(&item);
        ui->listWidget->sortItems();
        It doesn'tt work. I can't see anything.

        V J 2 Replies Last reply 20 May 2020, 08:38
        0
        • Q Qingshui Kong
          20 May 2020, 08:34

          @Bonnie Thank you very much.
          You explained how string comparision works. That is correct. And I tested as you said. But in my opinion, I still think they should compare the length of each string. Let it alone.

          At first my code is
          ui->listWidget->addItem(QString::number(nNum));
          ui->listWidget->sortItems();
          It works. I can see the num in the listwidget.

          But after I changed the code to
          QListWidgetItem item;
          item.setData(Qt::DisplayRole, nNum);
          ui->listWidget->addItem(&item);
          ui->listWidget->sortItems();
          It doesn'tt work. I can't see anything.

          V Offline
          V Offline
          VRonin
          wrote on 20 May 2020, 08:38 last edited by VRonin
          #4

          @Qingshui-Kong said in Why does not QListWidget sort correctly?:

          But after I changed the code to
          QListWidgetItem item;
          item.setData(Qt::DisplayRole, nNum);
          ui->listWidget->addItem(&item);
          ui->listWidget->sortItems();

          You were very close to the solution, you just have to create the QListWidgetItem on the heap instead of the stack otherwise it gets destroyed:

          auto item = new QListWidgetItem;
          item->setData(Qt::DisplayRole, nNum);
          ui->listWidget->addItem(item);
          ui->listWidget->sortItems();
          

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          Q 1 Reply Last reply 20 May 2020, 08:43
          2
          • Q Qingshui Kong
            20 May 2020, 08:34

            @Bonnie Thank you very much.
            You explained how string comparision works. That is correct. And I tested as you said. But in my opinion, I still think they should compare the length of each string. Let it alone.

            At first my code is
            ui->listWidget->addItem(QString::number(nNum));
            ui->listWidget->sortItems();
            It works. I can see the num in the listwidget.

            But after I changed the code to
            QListWidgetItem item;
            item.setData(Qt::DisplayRole, nNum);
            ui->listWidget->addItem(&item);
            ui->listWidget->sortItems();
            It doesn'tt work. I can't see anything.

            J Offline
            J Offline
            JonB
            wrote on 20 May 2020, 08:38 last edited by
            #5

            @Qingshui-Kong said in Why does not QListWidget sort correctly?:

            But in my opinion, I still think they should compare the length of each string.

            Then you had better let the C++/Qt designers know you don't agree with the way string comparisons work.

            Q 1 Reply Last reply 20 May 2020, 08:44
            0
            • V VRonin
              20 May 2020, 08:38

              @Qingshui-Kong said in Why does not QListWidget sort correctly?:

              But after I changed the code to
              QListWidgetItem item;
              item.setData(Qt::DisplayRole, nNum);
              ui->listWidget->addItem(&item);
              ui->listWidget->sortItems();

              You were very close to the solution, you just have to create the QListWidgetItem on the heap instead of the stack otherwise it gets destroyed:

              auto item = new QListWidgetItem;
              item->setData(Qt::DisplayRole, nNum);
              ui->listWidget->addItem(item);
              ui->listWidget->sortItems();
              
              Q Offline
              Q Offline
              Qingshui Kong
              wrote on 20 May 2020, 08:43 last edited by
              #6

              @VRonin Thanks. After I responded. I tried that. It worked.

              1 Reply Last reply
              0
              • J JonB
                20 May 2020, 08:38

                @Qingshui-Kong said in Why does not QListWidget sort correctly?:

                But in my opinion, I still think they should compare the length of each string.

                Then you had better let the C++/Qt designers know you don't agree with the way string comparisons work.

                Q Offline
                Q Offline
                Qingshui Kong
                wrote on 20 May 2020, 08:44 last edited by
                #7

                @JonB Maybe I just made a mistake. I just think I saw something like that.

                1 Reply Last reply
                0

                1/7

                20 May 2020, 07:35

                • Login

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