Ответ 1
Сигнал activated(QModelIndex)
на самом деле означает нечто большее, чем просто выбор. Концепция довольно расплывчата, но это больше похоже на акт явного выбора. Если вы просто ищете уведомление о том, что текущий выбор изменился, вы можете захватить модель выбора и подключиться к ее обновлениям.
MyView::MyView() {
QListView* view = new QListView(this);
connect(view->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(handleSelectionChanged(QItemSelection)));
}
...
MyView::handleSelectionChanged(const QItemSelection& selection){
if(selection.indexes().isEmpty()) {
clearMyView();
} else {
displayModelIndexInMyView(selection.indexes().first());
}
}
В приведенном выше коде displayModelIndexInMyView(QModelIndex)
должен быть заменен вашим текущим слотом обработчика для activated(QModelIndex)
и clearMyView()
заменен тем, что он хочет сделать, когда ничего не выбрано.
Там много способов сделать это, и, честно говоря, я не уверен, что такое канонический, но я думаю, что это сработает для вас.