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. select multiple items(dragable and non-dragable) causing the non-dragable items to disappear
Forum Updated to NodeBB v4.3 + New Features

select multiple items(dragable and non-dragable) causing the non-dragable items to disappear

Scheduled Pinned Locked Moved Unsolved General and Desktop
18 Posts 5 Posters 3.6k 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.
  • VRoninV VRonin

    disappear from the original list or from the data of the drag/drop event?

    D Offline
    D Offline
    Darren
    wrote on last edited by
    #5

    @VRonin non-dragable items disappear from the original source list, while dragable items move to the destination list.

    1 Reply Last reply
    0
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on last edited by
      #6

      This is very strange. Can you post a minimum example so we can have a deeper look into it?

      "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

      1 Reply Last reply
      2
      • D Darren

        I have two QListWidget. Some items within are dragable, some are non-dragable. The non-dragable items are non-selectable and non-enabled. However when I select multiple items(dragable and non-dragable) using the mouse( the list is set to selection mode: ExtendedSelection), the non-dragable items disappear totally. Is this a bug??

        CP71C Offline
        CP71C Offline
        CP71
        wrote on last edited by
        #7

        @Darren Hi
        I admit I didn't read the article for absence of time, I'm sorry, but I found this link:

        https://stackoverflow.com/questions/43283252/when-dragging-multiple-items-from-qlistwidget-non-draggable-items-get-removed

        I hope it help you

        D 1 Reply Last reply
        1
        • CP71C CP71

          @Darren Hi
          I admit I didn't read the article for absence of time, I'm sorry, but I found this link:

          https://stackoverflow.com/questions/43283252/when-dragging-multiple-items-from-qlistwidget-non-draggable-items-get-removed

          I hope it help you

          D Offline
          D Offline
          Darren
          wrote on last edited by
          #8

          @CP71 Thank you Cp71. I read this link previously but do not understand what they mean by creating QMimeData and QDrag objects in your source list widget's mouseMoveEvent.
          Secondly, is this a valid bug in QT? why aren't they solve this bug?

          CP71C 1 Reply Last reply
          0
          • D Darren

            @CP71 Thank you Cp71. I read this link previously but do not understand what they mean by creating QMimeData and QDrag objects in your source list widget's mouseMoveEvent.
            Secondly, is this a valid bug in QT? why aren't they solve this bug?

            CP71C Offline
            CP71C Offline
            CP71
            wrote on last edited by Christian Ehrlicher
            #9

            @Darren Hi,
            Sorry but I don’t understand, don’t worry, depend of my English isn’t good ;), if you didn't fix your problem or if fixed and are requiring further information (but I think you fixed your issue).

            The fix is the flag you pass at setDefaultDropAction function, Qt::MoveAction moves the items, Qt::CopyAction copies the items.

            I quickly read the article. About the QMineData and QDrag (if I don’t mistake, objects for data transfer via clipboard and drag and drop) mentioned in the article, I did not investigate in depth but I suppose writer says you that Qt manages them and you mustn't delete them.

            For me this isn’t a bug of Qt.

            Anyway I quickly created a simple example that is based on example in the link, I tried it and works well:

            MainWindow::MainWindow(QWidget *parent) :
                QMainWindow(parent),
                ui(new Ui::MainWindow)
            {
                ui->setupUi(this);
            
                ui->listWidget->setDragDropMode(QAbstractItemView::DragDrop);
            //    ui->listWidget->setDefaultDropAction(Qt::MoveAction);
                ui->listWidget->setDefaultDropAction(Qt::CopyAction);
                ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
            
            
                ui->listWidget_2->setDragDropMode(QAbstractItemView::DragDrop);
            //    ui->listWidget_2->setDefaultDropAction(Qt::MoveAction);
                ui->listWidget_2->setDefaultDropAction(Qt::CopyAction);
                ui->listWidget_2->setSelectionMode(QAbstractItemView::ExtendedSelection);
            
                fillListWidget(ui->listWidget, 8, "someItem");
                fillListWidget(ui->listWidget_2, 4, "anotherItem");
            }
            
            void MainWindow::fillListWidget(QListWidget *listWidget, int numItems, QString txt)
            {
                QString newTxt;
                for ( int i=0; i< numItems; i++ )
                {
                    QListWidgetItem *item = new QListWidgetItem();
                    newTxt = QString("%1_%2").arg(txt).arg(i);
            
                    if ( i % 2 )
                    {
                        item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
                    }
                    else
                    {
                        // If the item is draggable, indicate it with a *
                        newTxt += ' *';
                        item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled );
                    }
                    item->setText(newTxt);
                    listWidget->addItem(item);
                }
            }
            
            D 1 Reply Last reply
            1
            • CP71C CP71

              @Darren Hi,
              Sorry but I don’t understand, don’t worry, depend of my English isn’t good ;), if you didn't fix your problem or if fixed and are requiring further information (but I think you fixed your issue).

              The fix is the flag you pass at setDefaultDropAction function, Qt::MoveAction moves the items, Qt::CopyAction copies the items.

              I quickly read the article. About the QMineData and QDrag (if I don’t mistake, objects for data transfer via clipboard and drag and drop) mentioned in the article, I did not investigate in depth but I suppose writer says you that Qt manages them and you mustn't delete them.

              For me this isn’t a bug of Qt.

              Anyway I quickly created a simple example that is based on example in the link, I tried it and works well:

              MainWindow::MainWindow(QWidget *parent) :
                  QMainWindow(parent),
                  ui(new Ui::MainWindow)
              {
                  ui->setupUi(this);
              
                  ui->listWidget->setDragDropMode(QAbstractItemView::DragDrop);
              //    ui->listWidget->setDefaultDropAction(Qt::MoveAction);
                  ui->listWidget->setDefaultDropAction(Qt::CopyAction);
                  ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
              
              
                  ui->listWidget_2->setDragDropMode(QAbstractItemView::DragDrop);
              //    ui->listWidget_2->setDefaultDropAction(Qt::MoveAction);
                  ui->listWidget_2->setDefaultDropAction(Qt::CopyAction);
                  ui->listWidget_2->setSelectionMode(QAbstractItemView::ExtendedSelection);
              
                  fillListWidget(ui->listWidget, 8, "someItem");
                  fillListWidget(ui->listWidget_2, 4, "anotherItem");
              }
              
              void MainWindow::fillListWidget(QListWidget *listWidget, int numItems, QString txt)
              {
                  QString newTxt;
                  for ( int i=0; i< numItems; i++ )
                  {
                      QListWidgetItem *item = new QListWidgetItem();
                      newTxt = QString("%1_%2").arg(txt).arg(i);
              
                      if ( i % 2 )
                      {
                          item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
                      }
                      else
                      {
                          // If the item is draggable, indicate it with a *
                          newTxt += ' *';
                          item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled );
                      }
                      item->setText(newTxt);
                      listWidget->addItem(item);
                  }
              }
              
              D Offline
              D Offline
              Darren
              wrote on last edited by
              #10

              @CP71 My application needs a MOVE action. Not a COPY action. If you try
              ui->listWidget_2->setDefaultDropAction(Qt::MoveAction)
              this will cause the non-dragable items to be DELETED.

              CP71C 1 Reply Last reply
              0
              • D Darren

                @CP71 My application needs a MOVE action. Not a COPY action. If you try
                ui->listWidget_2->setDefaultDropAction(Qt::MoveAction)
                this will cause the non-dragable items to be DELETED.

                CP71C Offline
                CP71C Offline
                CP71
                wrote on last edited by
                #11

                @Darren Hi
                Ok, now I understand your problem.
                Sorry.

                1 Reply Last reply
                0
                • Christian EhrlicherC Offline
                  Christian EhrlicherC Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on last edited by
                  #12

                  Please provide a simple, compilable example so we can take a deeper look on your problem.

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  1 Reply Last reply
                  1
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by mrjj
                    #13

                    Hi
                    Using @CP71 (thanks :) code as base it was fast to make sample.
                    It does seems it does not honor movable if multiple is selected
                    and after the drop ( which only shows the correct ones) , it seems to delete/remove
                    all of selection even some were not dropped. ( those without *)

                    alt text

                    Read to run project
                    https://www.dropbox.com/s/urt1pwfvqs3xmbj/DragDropFail.zip?dl=0

                    (tested on win 10, Qt5.12)

                    1 Reply Last reply
                    2
                    • Christian EhrlicherC Offline
                      Christian EhrlicherC Offline
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on last edited by
                      #14

                      @mrjj : Thx for the reproducer. will take a look on soon.
                      Since there is no bugreport about this (at least I'm not aware of one) - can someone please create them :)

                      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                      Visit the Qt Academy at https://academy.qt.io/catalog

                      1 Reply Last reply
                      1
                      • Christian EhrlicherC Offline
                        Christian EhrlicherC Offline
                        Christian Ehrlicher
                        Lifetime Qt Champion
                        wrote on last edited by
                        #15

                        Here a first shot: https://codereview.qt-project.org/251888
                        As a workaround you can override QAbstractItemView::startDrag() and adjust the selected items to only contain the ones which are also dragable.

                        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                        Visit the Qt Academy at https://academy.qt.io/catalog

                        1 Reply Last reply
                        1
                        • mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #16

                          Hi
                          Damn, you are fast :)
                          Do we still need a bug report ?

                          Christian EhrlicherC 1 Reply Last reply
                          0
                          • mrjjM mrjj

                            Hi
                            Damn, you are fast :)
                            Do we still need a bug report ?

                            Christian EhrlicherC Offline
                            Christian EhrlicherC Offline
                            Christian Ehrlicher
                            Lifetime Qt Champion
                            wrote on last edited by
                            #17

                            @mrjj It would be nice to have a bug report to get an official bug so it can be better documented later on. I also need to create another testcase for QTreeView and esp. for QListView in icon mode since there is a special handling.

                            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                            Visit the Qt Academy at https://academy.qt.io/catalog

                            mrjjM 1 Reply Last reply
                            2
                            • Christian EhrlicherC Christian Ehrlicher

                              @mrjj It would be nice to have a bug report to get an official bug so it can be better documented later on. I also need to create another testcase for QTreeView and esp. for QListView in icon mode since there is a special handling.

                              mrjjM Offline
                              mrjjM Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on last edited by
                              #18

                              @Christian-Ehrlicher
                              https://bugreports.qt.io/browse/QTBUG-73465
                              Please let me know if i need to change something.

                              1 Reply Last reply
                              3

                              • Login

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