【问题标题】:One QStandardItemModel for different QTableView, Generic vs Specific Views一个 QStandardItemModel 用于不同的 QTableView、通用视图和特定视图
【发布时间】:2010-08-30 20:04:11
【问题描述】:

我真的不知道这是否有意义,但这就是我想要做的:

我在 QT 中做我的游戏编辑器。目前我正在使用 QStandardItemModel 来存储我的所有场景项目。这些项目有名称、位置、纹理(自定义类的纹理向量)、动画(动画向量)等。

我发现将一个项目用于行很有用,因为除了将它们放在一个地方之外,我可以轻松添加或删除这些项目,因此更改此模型会影响整个应用程序。

现在,我正在尝试为某个项目的“纹理”做特定的视图。这个 QTableView 应该显示纹理的名称、路径等。那么,基本上我怎样才能在通用模型中抓取纹理的向量并填充另一个视图而不做另一个模型?

【问题讨论】:

    标签: qt model qtableview


    【解决方案1】:

    您将需要使用 QSortFilterProxy 模型。像这样设置一个。

    QTableView *tableView = new QTableView;
    MyItemModel *sourceModel = new MyItemModel(this);
    QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
    
    proxyModel->setSourceModel(sourceModel);
    proxyModel->setFilterKeyColumn(column_#_to_filter_by);
    proxyModel->setFilterRegExp(a_regex_that_matches_the_item_you_want_to_display);
    tableView->setModel(proxyModel);
    

    您应该能够使用一种模型和不同的代理来设置不同的视图。

    【讨论】:

    • 感谢您的代码,它现在看起来很清晰,正是我想要的。但我还有另一个问题,如果我想获取特定列以获取另一个视图怎么办。假设您有一个人模型,其中包含姓名、姓氏、年龄、性别。而且您不希望只有姓名和姓氏的视图。该代理看起来像是只假装一列。
    • 在这种情况下,您只需在模型上设置一个视图,对于您不感兴趣的每一列,调用 setColumnHidden(column_num, true)。
    • 我也找到了另一个解决方案。可以对 QSortFilterProxyModel 进行子类化并覆盖 filterAcceptsColumn 方法,您希望在该方法中将 false 返回到您不想显示的列。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    相关资源
    最近更新 更多