ブランチがディスクからロードされる大きなツリーを作成しました。この操作は完了するまでに 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()));
しかし、私はそれを機能させることはできません。
詳細に迷っていますか、それとも完全に間違った道を進んでいますか?