我的应用程序包含QTreeView
,其基础模型(例如MyModel
)来自QStandardItemModel
。为了从视图中过滤掉MyModel
的某些项目,我将其插入QSortFilterProxyModel
,然后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);
。当我需要从我的代理模型的给定索引中获取我的源模型的一个项目时,我总是需要对此进行编码:
SET
我没有找到任何直接的方法来做到这一点。你会意识到更多的直接方式吗?或者是我在使用Qt代理模型概念的方式中理解某些东西的标志?
答案 0 :(得分:2)
您正确使用它 - 您正在执行的步骤没有内置快捷方式。
如果qobject_cast
具有MyModel
宏,您可以使用Q_OBJECT
加快速度,但除此之外,确切地说如何使用模型。
对于这样的情况,我通常在使用模型的类上创建一个包装器方法,或者扩展QSortFilterProxyModel
以获得这样的方法。例如,你可以创建一个扩展前者的StandardSortFilterProxyModel
,只接受基于QStandardItemModel
的类,并提供一系列方法来按照你需要的方式访问项目。
请注意,如果您只想从模型中获取特定数据而不是项目本身(如所选列的文本),则可以始终直接使用proxy_model->data(proxy_index)
并从QVariant获取值。