Qt:如何在使用QSortFilterProxyMod时自动展开新QTreeView项的父项

2024-10-01 13:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个应用程序,用户可以随时向QTreeModel添加新数据。放置它的父项将自动展开以显示新项:

self.tree = DiceModel(headers)
self.treeView.setModel(self.tree)
expand_node = self.tree.addRoll()
#addRoll makes a node, adds it, and returns the (parent) note to be expanded
self.treeView.expand(expand_node)

这是理想的工作。如果我将QSortFilterProxyModel添加到混合中:

^{pr2}$

父对象不再扩展。你知道我做错什么了吗?在


Tags: 数据用户selfnodetree应用程序headersexpand
1条回答
网友
1楼 · 发布于 2024-10-01 13:41:55

我认为在调用expand之前,应该将扩展项索引映射到代理模型项索引中。QSortFilterProxyModel::mapFromSource方法应该满足您的需要。请检查下面的示例是否适合您(它是c++,如果您在将其转换为python时遇到问题,请告诉我):

// create models
QStandardItemModel* model = new (QStandardItemModel);
QSortFilterProxyModel* proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(model);

// set model
ui->treeView->setModel(proxyModel);   
ui->treeView->setSortingEnabled(true);

// generate items
QStandardItem* parentItem0 = model->invisibleRootItem();
QModelIndex index = parentItem0->index();
for (int i = 0; i < 4; ++i)
{
    QStandardItem* item = new QStandardItem(QString("new item %0").arg(i));
    parentItem0->appendRow(item);
    parentItem0 = item;

    // expand items using proxyModel->mapFromSource 
    ui->treeView->expand(proxyModel->mapFromSource(item->index()));
    // line below doesn't work for you
    //ui->treeView->expand(item->index());
}

希望这对你有帮助,谢谢

相关问题 更多 >