Results 1 to 1 of 1

Thread: QTreeWidget loses selection while moving items down

  1. #1
    Join Date
    May 2009
    Location
    Germany
    Posts
    11
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default QTreeWidget loses selection while moving items down

    Hi,
    i have a treewidget with items which i want to move up and down when pressing a key or button. The function "MoveUp" works fine but while using "MoveDown" it happens often (mostly after the first move downwards) that some of the selected items/rows (sometimes the first and last keep selected and sometimes one or two randomly) lose their selection.

    Working moveUp():
    Qt Code:
    1. void MainWindow::moveUp()
    2. {
    3. QList<QTreeWidgetItem *> selectedItems = ui->treeWidget->selectedItems();
    4.  
    5. if ( selectedItems.isEmpty())
    6. return;
    7.  
    8. // If selection has the first line the items are on the top -> return
    9. int row = ui->treeWidget->indexOfTopLevelItem( selectedItems.first() );
    10. if ( row == 0 )
    11. return;
    12.  
    13. QTreeWidgetItem *itemAbove;
    14. QListIterator<QTreeWidgetItem *> it( selectedItems );
    15.  
    16. while ( it.hasNext() )
    17. {
    18. row = ui->treeWidget->indexOfTopLevelItem( it.next() );
    19. itemAbove = ui->treeWidget->takeTopLevelItem( row - 1 );
    20. ui->treeWidget->insertTopLevelItem( row, itemAbove );
    21. }
    22. }
    To copy to clipboard, switch view to plain text mode 

    Buggy(?) moveDown():
    Qt Code:
    1. void MainWindow::moveDown()
    2. {
    3. QList<QTreeWidgetItem *> selectedItems = ui->treeWidget->selectedItems();
    4.  
    5. if ( selectedItems.isEmpty() )
    6. return;
    7.  
    8. // If selection has the first line the items are on the top -> return
    9. int row = ui->treeWidget->indexOfTopLevelItem( selectedItems.last() );
    10. if ( row == ui->treeWidget->topLevelItemCount() - 1 )
    11. return;
    12.  
    13. QTreeWidgetItem *itemBelow;
    14. QListIterator<QTreeWidgetItem *> it( selectedItems );
    15. it.toBack();
    16.  
    17. while ( it.hasPrevious() )
    18. {
    19. row = ui->treeWidget->indexOfTopLevelItem( it.previous() );
    20. itemBelow = ui->treeWidget->takeTopLevelItem( row + 1 );
    21. ui->treeWidget->insertTopLevelItem( row, itemBelow );
    22. }
    23. }
    To copy to clipboard, switch view to plain text mode 

    Edit: Not sure what's the problem but i solved it with the following better approach:
    Qt Code:
    1. void MainWindow::moveDown()
    2. {
    3. QList<QTreeWidgetItem *> selectedItems = ui->treeWidget->selectedItems();
    4.  
    5. if ( selectedItems.isEmpty() )
    6. return;
    7.  
    8. // If selection has the first line the items are on the top -> return
    9. int row = ui->treeWidget->indexOfTopLevelItem( selectedItems.last() );
    10. if ( row == ui->treeWidget->topLevelItemCount() - 1 )
    11. return;
    12.  
    13. QTreeWidgetItem *itemBelow;
    14.  
    15. row = ui->treeWidget->indexOfTopLevelItem( selectedItems.last() );
    16. itemBelow = ui->treeWidget->takeTopLevelItem( row + 1 );
    17. ui->treeWidget->insertTopLevelItem( row + 1 - selectedItems.length() , itemBelow );
    18.  
    19. ui->treeWidget->scrollToItem( selectedItems.last() );
    20. }
    To copy to clipboard, switch view to plain text mode 

    If somebody finds the error in the first version it would be nice to tell me.
    Last edited by kei; 18th September 2009 at 17:01. Reason: Solved

Similar Threads

  1. (PyQt) moving items within a QTreeWidget
    By calireno in forum Newbie
    Replies: 0
    Last Post: 12th November 2008, 03:33
  2. Save & Restore a selection in QTreeWidget
    By youkai in forum Qt Programming
    Replies: 1
    Last Post: 1st September 2008, 19:54
  3. QTreeWidget selection
    By adhit in forum Qt Programming
    Replies: 3
    Last Post: 25th April 2008, 09:08
  4. Removing items properly from qtreewidget item
    By Djony in forum Qt Programming
    Replies: 6
    Last Post: 21st November 2006, 12:20
  5. QTreeWidget & QListWidget different selection
    By munna in forum Qt Programming
    Replies: 9
    Last Post: 21st July 2006, 06:50

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.