У меня есть QTreeView
в моем виджете. Когда элемент выбран в представлении, у меня есть
обработчик сигнала, который обновляет серию информационных виджетов в подробном окне
о выбранном товаре. Затем пользователь может отредактировать детали элемента и зафиксировать
возвращается к модели.
Если данные в подробном ракурсе были отредактированы при изменении этого выбора
случается, я представляю диалоговое окно подтверждения пользователю перед заменой данных
когда новый элемент выбран. Если пользователь отменяет, я хочу установить выбор
дерево вернулось к тому, что было раньше.
Мой слот подключен так:
auto selection_model = treeview->selectionModel();
connect(
selection_model, &QItemSelectionModel::currentChanged,
this, &Editor::on_tree_selection_changed
)
Внутри моего слота код структурирован следующим образом:
void on_tree_selection_changed(QModelIndex const& index, QModelIndex const& previous)
{
if(not confirm_editor_discard())
{
// user does not want to override current edits
log.trace("cancel item selection change");
using SF = QItemSelectionModel::SelectionFlags;
auto sm = treeview->selectionModel();
sm->setCurrentIndex(previous, SF::SelectCurrent | SF::Rows);
}
else
{
// user wants to discard, so update the details view.
log.trace("discard pending edits");
set_details_from_model(index);
}
}
Однако установка текущего индекса на предыдущий, похоже, не
воздействовать на TreeView; он по-прежнему отображает вновь выбранный элемент как выбранный, и
интерфейс становится непоследовательным, поскольку отображаемый в деталях элемент
не тот, который показан как выбранный в дереве.
Предполагаемое поведение - повторно выбрать ранее выбранный элемент, как будто нет
новый выбор был сделан вообще.