Сигнал, когда выбор QListView изменяется из-за активности клавиатуры?
У меня есть QDialog, созданный с помощью Qt Designer, который выглядит так:
список серверов слева-это QListView с QStringListModel. Щелчок мышью по элементу в представлении списка обновляет форму с информацией для выбранного элемента, подключая сигнал активированного представления (QModelIndex) к функции слота в диалоговом окне.
однако нажатие вверх или вниз на клавиатуре также изменяет выбранный элемент, но сигнал не излучается, поэтому форма не обновляется в соответствии с выбранным элементом. Как это можно исправить?
2 ответов
на 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()
заменено на то, что вы хотите сделать когда ничего не выбрано.
есть много способов сделать это, и, честно говоря, я не уверен, что это канонический, но я думаю, что это сработает для вас.