Как заставить модель выбора работать с моделью прокси? - PullRequest
6 голосов
/ 26 сентября 2008

У меня есть модель и два вида, настроенные так:

Model ---> OSortFilterProxyModel ---> OListView
Model ------------------------------> OTableView

Когда пользователь выбирает что-то в одном из представлений, я хочу, чтобы другое представление отражало этот выбор. Поэтому я решил использовать QSelectionModel, чтобы связать их вместе. Но это не работает. У меня есть ощущение, что это потому, что мнения думают, что у них есть две разные модели, хотя на самом деле они имеют одну и ту же модель. Есть ли способ заставить это работать?

Ответы [ 3 ]

2 голосов
/ 26 сентября 2008

Вероятно, происходит то, что представления имеют две разные модели. Одна - ваша оригинальная модель, другая - модель фильтра сортировки.

Я не уверен, сработает ли это, и это зависит от того, что Qt считает «активированным», но вы можете подключить функцию к каждому из активированных слотов представления. Они передадут вам модельный индекс. Вам нужно будет отправить модельный индекс через прокси-модель в соответствующем направлении (mapFromSource и mapToSource). Затем вызовите setCurrentIndex для другого представления.

В документации по активированному сигналу говорится, что то, что считается "активированным", зависит от платформы. Могут быть и другие сигналы, которые вы можете зафиксировать, например, изменение выбранной модели. Возможно, вам придется сделать другой вызов, чтобы изменить выбор, как видит пользователь. И, наконец, это может быть возможно или даже проще сделать в производной QSelectionModel, если вы помните о отображении в / из исходной модели.

1 голос
/ 19 сентября 2011

Возможно, вам нужно использовать void QItemSelectionModel :: select в сочетании с QAbstractProxyModel :: mapSelectionFromSource и QAbstractProxyModel :: mapSelectionToSource . В обработчике сигналов selectionChange QListView у вас должно быть

tableView->selection()->select(
    proxyModel->mapSelectionToSource(selected),
    QItemSelectionModel::ClearAndSelect);

и аналогично mapSelectionFromSource в обработчике сигнала signalChange QTableView.

Обратите внимание, что я не уверен, что Qt предотвратит бесконечную рекурсию, когда таблица изменит выбор списка, что, в свою очередь, изменит выбор таблицы и так далее ...

1 голос
/ 14 января 2009

Не совсем уверен, как реализован ваш подкласс модели, но выбор зависит от правильности постоянных модельных индексов. Можете ли вы предоставить исходный код? Вы используете одну и ту же модель выбора на обоих?

...