Our project migrated from from qt 4.5 to 4.7.
In our code we created replacement for standard QItemSelectionModel in which we override method select(...), for getting behavior like we need. In method select(...) we have special logic for case QItemSelectionModel::Toggle. But in qt 4.7 in QAbstractItemView::mousePressEvent(...) added new code before calling setSelection(rect, command) :

Qt Code:
  1. if (command.testFlag(QItemSelectionModel::Toggle)) {
  2. command &= ~QItemSelectionModel::Toggle;
  3. d->ctrlDragSelectionFlag = d->selectionModel->isSelected(index) ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
  4. command |= d->ctrlDragSelectionFlag;
  5. }
  6. setSelection(rect, command);
To copy to clipboard, switch view to plain text mode 

This code will filter flag QItemSelectionModel::Toggle. Because of that we can't getting any more flag in which set QItemSelectionModel::Toggle in overrides QItemSelectionModel::select(...). For why this changes and how now we can know, that need process Toggle flag.