Ну, когда мне нужен был контролируемый селект, я наследовался от QItemSelectionModel.
переопределял там две функции, что-то типо этого
C++ (Qt)
void SelectModel::select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)
{
if (QApplication::keyboardModifiers() & Qt::ShiftModifier) {
QItemSelectionModel::select(selection, command);
}
}
void SelectModel::select(const QModelIndex &selection, QItemSelectionModel::SelectionFlags command)
{
if (QApplication::keyboardModifiers() & Qt::ShiftModifier) {
QItemSelectionModel::select(selection, command);
}
}
Да и есче, учти, что если ты нажал шифт или сонтрол не в фокусе приложения (или еще хуже отпустил), то флаг keyboardModifiers не обноаляется. я делал такую вещь :
вместо прямой проверки (QApplication::keyboardModifiers() & Qt::ShiftModifier)... использовал свой флаг, который сбрасывал при астивации/деактивации главного окна
C++ (Qt)
bool MainWindow::event(QEvent *e)
{
if (e->type() == QEvent::WindowActivate
|| e->type() == QEvent::WindowDeactivate) {
setIsSelectMyFlag(false);
}
return QMainWindow::event(e);
}