从 QSortFilterProxyModel 的索引中获取源模型的项

Eur*_*ice 5 qt

我有一个应用程序,其中包含一个QTreeView其底层模型,比如MyModelQStandardItemModel. 为了从view中过滤掉一些items MyModel,我把它插进aQSortFilterProxyModel里面,然后又插进了QTreeView。当我需要从我的代理模型的给定索引中获取源模型的一项时,我总是必须这样编码:

auto my_model = dynamic_cast<MyModel*>(proxy_model->sourceModel());
auto source_index = proxy_model->mapToSource(proxy_index);
auto item = my_model->itemFromIndex(source_index);
Run Code Online (Sandbox Code Playgroud)

我没有找到任何直接的方法来做到这一点。您是否知道更直接的方法来做到这一点,或者是我在使用 Qt 代理模型概念的方式中理解某些东西的迹象?

Fel*_*lix 5

您正在正确使用它 - 您正在执行的步骤没有内置的快捷方式。

qobject_cast如果MyModelQ_OBJECT宏,你可以用来加快速度,否则这就是如何使用模型。

对于这样的情况,我通常会在使用模型的类上创建一个包装方法,或者扩展QSortFilterProxyModel具有这样一个方法的类。例如,您可以创建一个StandardSortFilterProxyModel扩展前者并且只接受QStandardItemModel基于类的类,并提供一堆方法来以您需要的方式访问项目。

请注意,如果您只想从模型中获取特定数据而不是项目本身(如所选列的文本),您始终可以proxy_model->data(proxy_index)直接使用并从 QVariant 中获取您的值。