我建了一棵大树,它的树枝是从磁盘加载的,这个操作需要 5 分钟才能完成。为了加快速度,我只想加载用户从 GUI 中选择的子树。
这是当前代码,一次加载所有内容:
int MyWidget::AddSubtree(QTreeWidgetItem *_projectItem,
const QString &_filePath)
{
const QString currentPrj = _projectItem->text(0);
QDir* rootDir = new QDir(_filePath);
QFileInfoList filesList = rootDir->entryInfoList();
filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
if(fileInfo.isDir())
{
const QString job = fileInfo.fileName();
QTreeWidgetItem* jobItem = new QTreeWidgetItem();
jobItem->setText(0, job);
//+P Performance critical! Do it on demand
AddSubSubtree(jobItem, fileInfo.filePath());
_projectItem->addChild(jobItem);
}
}
return 0;
}
int MyWidget::AddSubSubtree(QTreeWidgetItem *_jobItem,
const QString &_filePath)
{
const QString currentJob = _jobItem->text(0);
QDir* rootDir = new QDir(_filePath);
rootDir->cd("subDir");
// Retrieve the runs
filesList = rootDir->entryInfoList();
foreach(QFileInfo fileInfo, filesList)
{
if(fileInfo.isDir())
{
const QString run = fileInfo.fileName();
QTreeWidgetItem* runItem = new QTreeWidgetItem();
runItem->setText(0, run);
_jobItem->addChild(runItem);
}
}
return 0;
}
我想做的是删除性能关键线(在 //+P 下方),并在用户单击相应的父分支时在单个子子树上调用 AddSubSubtree() 。
如何检测已单击特定父分支?
我知道我在 AddSubtree 中需要这样的东西:
connect(jobItem, SIGNAL(triggered()), this, SLOT(AddSubSubtree()));
但我不能让它工作。
我是迷失在细节中,还是走在完全错误的道路上?