This has a chance of not-working. It would probably be better to remove the rows from the end to the beginning to retain validity of model indexes or to call removeRows() if the selection forms a range without gaps.
yes, it's inconvenient to remove selected rows. You have to sort them by the row index and then remove them, while in QListWidget, you only need to delete the QListWidgetItem.