Russian Qt Forum
Май 17, 2024, 16:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странное использование QAbstractProxyModel  (Прочитано 4955 раз)
burunduk
Гость
« : Январь 13, 2008, 00:27 »

может кто знает что тут делается :)
в частности не очень ясно такое использование QAbstractProxyModel

метод из примера Qt treemodelcompleter:

Код:
void MainWindow::highlight(const QModelIndex &index)
{
    QAbstractItemModel *completionModel = completer->completionModel();
    QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
    if (!proxy)
        return;
    QModelIndex sourceIndex = proxy->mapToSource(index);
    treeView->selectionModel()->select(sourceIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
    treeView->scrollTo(index);
}
Записан
Kainit
Гость
« Ответ #1 : Январь 14, 2008, 11:33 »

Не поручусь за всех но мне непонятно в чём странность использования..

Есть обычная QAbstractItemModel, над ней возводится QAbstractProxyModel (например, для фильтрации данных и для сортировки), Разумеется, вьюв работает не с QAbstractProxyModel , а с QAbstractItemModel.

     proxyModel->setSourceModel(model);
     sourceView->setModel(model);

Именно поэтому мы пытаемся сначала сделать qobject_cast и если он не проходит, делаем
    if (!proxy)
        return;

затем нам нужно из проксёвого индекса получить индекс исходной модели
  QModelIndex sourceIndex = proxy->mapToSource(index);

и выделить соответствующий айтем во вьюхе
 treeView->selectionModel()->select(sourceIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);

мне кажется что всё вполне логично и оправданно, особенно если внимательно прочитать весь пример.


« Последнее редактирование: Январь 14, 2008, 11:35 от Kainit » Записан
Emc
Гость
« Ответ #2 : Январь 14, 2008, 12:45 »

тут дело немного в другом -- proxyModel как таковая не используется, а нужна лишь для получения индекса, который затем и выделяется в treeView.

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.109 секунд. Запросов: 20.