如何禁用QTreeView或Model的过滤选项

时间:2016-06-23 05:01:08

标签: c++ qt

我有一段代码处理两个QTreeView,其中项目从左侧树视图添加到右侧树视图。这是代码的一部分:

    var keyCodes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '/', '\\'];
    if (keyCodes.find(predicate) === $event.keyCode) {
        // do something
    }

function predicate(e) {
    return e === $event.keyCode;
}

现在过滤一些字符串的设置如下:

MasterModel *model = new MasterModel;
leftProxyFilterModel *leftModel = new leftProxyFilterModel;
rightSelectedRowsFiletrModel *rightModel = new rightSelectedRowsFilterModel;

QTreeView *leftTreeView;
QTreeView *rightTreeView;

leftModel->setSourceModel(model);
rightModel->setSourceModel(leftModel);

leftTreeView->setModel(leftModel);
rightTreeView->setModel(rightModel);

这一行是过滤两个树视图的内容,我想要的是过滤选项应该只适用于左侧树视图。 有人可以帮我实现这个吗?

1 个答案:

答案 0 :(得分:1)

如果rightModel的来源为leftModel,则您应用于leftModel的所有过滤器也会影响rightModel

rightModel->setSourceModel(leftModel)更改为rightModel->setSourceModel(model)

更新:或者,您可以添加另一层QSortFilterProxyModel,以便您的过滤器不会传播到rightModel

leftModel->setSourceModel(model);
rightModel->setSourceModel(leftModel);

auto leftFilteredModel = new QSortFilterProxyModel;
leftFilteredModel->setSource(leftModel);
leftFilteredModel->setFilterWildcard(LineEdit->text());

leftTreeView->setModel(leftFilteredModel);
rightTreeView->setModel(rightModel);