gpt4 book ai didi

QTreeView 无法扩展 - 是否有解决方法来获取更少的 ModelIndex?

转载 作者:行者123 更新时间:2023-12-04 13:24:17 27 4
gpt4 key购买 nike

我正在开发一个使用 Qt 的 QTreeView 的应用程序。显示分层数据。在某些情况下,层次结构中的单个叶子将包含 100,000 个子节点。

我发现 QTreeView不能处理太多的子节点。

这是因为当用户打开父节点时,Qt 会获取所有子节点的 ModelIndexes ,而不仅仅是填写 QTreeView 所需的那些展示。

为什么要这样做,是否有任何解决方法可以使其获取更少ModelIndexes ?

最佳答案

不幸的是,由于用户无法设置 QTreeWidget(我正在使用 QTreeWidget 来简化) slider ,我之前的回答毫无用处。
您的目标可以通过使用额外的 QScrollBar 来实现。

MainWidget.h

class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget(QWidget *parent = 0);
private:
QTreeWidget* Tree;
QScrollBar* Bar;
private slots:
void tree(QTreeWidgetItem*);
void slider();
};

MainWidget.cpp
MainWidget::MainWidget(QWidget *parent): QWidget(parent) {
Tree = new QTreeWidget();
Tree->header()->hide();
connect(Tree,SIGNAL(itemExpanded(QTreeWidgetItem*)),this,SLOT(tree(QTreeWidgetItem*)));
Bar = new QScrollBar(Qt::Vertical);
Bar->setRange(0,100000);
connect(Bar,SIGNAL(sliderReleased()),this,SLOT(slider()));
for(uint i=0;i<10;i++) {
QTreeWidgetItem* Item=new QTreeWidgetItem(QStringList()<<QString::number(i)); //Add 10 topLevelItems
Tree->addTopLevelItem(Item);
for(uint j=0;j<30;j++) {
Item->addChild(new QTreeWidgetItem(QStringList()<<QString::number(j))); //Add first 30 items
}
}
QHBoxLayout* Lay = new QHBoxLayout();
Lay->addWidget(Tree);
Lay->addWidget(Bar);
setLayout(Lay);
}
void MainWidget::tree(QTreeWidgetItem* I) { //SLOT Only one item expanded
Tree->blockSignals(true); //Block SIGNAL(itemExpanded())
Tree->collapseAll();
Tree->expandItem(I);
Tree->blockSignals(false);//Allow SIGNAL(itemExpanded())
}
void MainWidget::slider() { //SLOT manage tree
for (int i=0;i<Tree->topLevelItemCount();i++) {
if (Tree->topLevelItem(i)->isExpanded()) {
for(uint j=Tree->topLevelItem(i)->childCount(); j>0;j--) { //Clear children
delete Tree->topLevelItem(i)->child(j-1);
}
uint Value = Bar->value();
for(uint j=0; j<30; j++) {
Tree->topLevelItem(i)->addChild(new QTreeWidgetItem(QStringList()<<QString::number(Value+j))); //Add 30 new children
}
break;
}
}
}

这样一来,您就可以使用一个 slider 来滚动 QTreeWidget,而第二个 slider 可以更改展开的 topLevelItem 的内容。

关于QTreeView 无法扩展 - 是否有解决方法来获取更少的 ModelIndex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26286726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com