Qt QTreeView - возврат к предыдущему выбору, когда условие не выполнено

При изменении выбора QTreeView я хотел бы вернуться к предыдущему выбору, если определенное условие не выполняется.

Например:

    void Editor::treeFolderSelected(QModelIndex const& index)
    {
        if(widget) {
            if(!widget->trySaveChanges()) {
                //revert to previous, validation failed
                return;
            }
        }

        //do normal behaviour

}

В настоящее время я не вижу прямого способа сделать это, так как QModelIndex не предоставляет никакой информации относительно того, что было выбрано ранее.

У кого-нибудь есть какие-либо предложения по наилучшему способу реализации этого?

2 ответа

int lastSelection = -1;
bool abortEvent = false;
void Editor::treeFolderSelected(QModelIndex const& index)
{
   if (abortEvent) {
       abortEvent = false;
       return;   
   }
   if(widget) {
     if(!widget->trySaveChanges()) {
        if (lastSelection != -1) {
          abortEvent = true;
          select(lastSelection);
        }  
        return;
      }
      lastSelection = index;
   }
}

Выбор вида имеет свою собственную модель, QItemSelectionModel, с сигналами, которые дают вам новый и предыдущий выбор.

Другие вопросы по тегам