Сигнал, когда выбор QListView изменяется из-за клавиатуры?

У меня есть QDialog, созданный с помощью QT Designer, который выглядит так: диалог

Список серверов слева представляет собой QListView с QStringListModel. Щелчок мышью по элементу в представлении списка обновляет форму с информацией для выбранного элемента, подключая сигнал активированного представления (QModelIndex) к функции слота в диалоговом окне.

Однако нажатие вверх или вниз на клавиатуре также изменяет выбранный элемент, но сигнал не подается, поэтому форма не обновляется в соответствии с выбранным элементом. Как это можно исправить?

11

Решение

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() заменить на то, что вы хотите сделать, когда ничего не выбрано.

Есть много способов сделать это, и, честно говоря, я не уверен, что является каноническим, но я думаю, что это будет работать для вас.

22

Другие решения

Другой способ заключается в реализации QListView::currentChanged(...) виртуальная функция.

0

По вопросам рекламы [email protected]