如何在用户点击分支时逐步构建Qt树小部件
How to build a Qt tree widget step by step, when the user clicks on the branches?
我构建了一棵大树,其分支是从磁盘加载的,这个操作需要 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()));
但我无法让它工作。
我是迷失在细节中,还是走在一条完全错误的道路上?
我想你可能正在寻找来自QTreeWidget的信号项目点击(QTreeWidgetItem * item, int column)。我会尝试这样的事情:
connect(yourTree, SIGNAL(itemClicked()), yourTree, SLOT(AddSubTree()));
你必须对 TreeWidget 进行子类化,并使 AddSubTree(QTreeWidgetItem* item, int column) 成为该子类的插槽。然后在 AddSubTree 中,检查列号是否正确,如果是,则将相应的子树添加到参数项中。
您可能希望移植到QAbstractItemModel
和QTreeView
实现QAbstractItemModel
以返回数据并使用canFetchMore(QModelIndex&)
和fetchMore
进行实际提取的位置
相关文章:
- 如何构建Qt + cmake + QGLWidget
- 在Visual Studio 2017中构建Qt可执行文件
- 尝试使用 MSVC 从源代码构建 qt 创建器:无法打开包含文件:"stddef.h":没有这样的文件或目录
- 错误:无法构建 PhantomJS!构建Qt基地失败
- 如何在构建Qt应用程序时运行git命令
- 使用Visual Studio构建QT
- 如何使用MINGW-W64通过链接时间优化构建QT
- 使用Qt多媒体支持构建Qt
- 尝试在树莓派上构建Qt项目,为什么它会抛出有关qmake的错误
- MSVC 编译器在调试模式下构建 Qt 5.10 时崩溃
- 如何使用-REDUCE -RECATIONS构建QT
- 从MACOS上的源代码构建QT时错误
- 如何有效地构建QT应用程序
- 如何正确构建Qt插件
- 从源代码构建Qt 5.8 - 配置:未知命令行选项'-c++11'
- 尝试使用VC++编译器构建Qt应用程序:"type_traits":没有这样的文件或目录
- 如何使用Team Foundation Server 2017构建QT应用程序
- 使用Visual Studio 2013构建QT 5.2.1的静态版本
- 为嵌入式系统构建QT时错误
- 无法在Visual Studio 2005中构建Qt项目