Авварон, dragDropMode не особо помог. Зато рядышком у view есть свойство dragDropOverwriteMode - так вот, для list view, если его выставить в false, removeRows() начинает отрабатывать! Т.е. для списка работают и Copy, и Move.
Теперь делаю аналогичный пример для table view. Всё отличие в том, что виджеты не QListView, а QTableView, и у модели в дополнение к rowCount() переопределил ещё и columnCount(). Начинаю таскать. CopyAction по-прежнему работает, а с MoveAction проблема та же, что и раньше, т.е. removeRows() не вызывается.
Уже начинаю перечитывать доку и придираться к словам:
For example, to allow Qt::MoveAction to be used properly with a list model, the model must provide an implementation of QAbstractItemModel::removeRows(), either directly or by inheriting the implementation from its base class.
Может, этот приём только с list model и работает? А как же тогда с table view разруливать? Руками посылать сигнал в модель виджета-источника, чтобы она сама удаляла нужную строку? Да нет, чепуха какая-то, чем таблицы хуже списков...