C++ 如何在windows/qt中筛选目录是否为根目录?
当用户键入path时,我显示文件夹的内容(仅显示某些文件)。如果它是根文件夹(c:\drive),我不想显示内容,因为它会搜索所有子目录,这会花费太长时间,而且不需要 问题是,如果我在编辑框中键入“c:\\”,它仍然会搜索c:\drive,但QDir::isRoot()不会选择它。我怎样才能准确地捕捉到可能是根路径甚至是程序文件路径的路径?我正在使用Windows7C++ 如何在windows/qt中筛选目录是否为根目录?,c++,qt,C++,Qt,当用户键入path时,我显示文件夹的内容(仅显示某些文件)。如果它是根文件夹(c:\drive),我不想显示内容,因为它会搜索所有子目录,这会花费太长时间,而且不需要 问题是,如果我在编辑框中键入“c:\\”,它仍然会搜索c:\drive,但QDir::isRoot()不会选择它。我怎样才能准确地捕捉到可能是根路径甚至是程序文件路径的路径?我正在使用Windows7 void MainWindow::on_lineEditSourceFolder_textChanged(const QStrin
void MainWindow::on_lineEditSourceFolder_textChanged(const QString &arg1)
{
//qDebug() << "edit text changed: " << arg1;
QDir dir( arg1 ) ;
if ( !dir.exists() )
{
model->clear();
return;
}
QString dirPath = dir.absolutePath();
if (dir.isRoot() )
{
qDebug() << arg1 << " is root";
return;
}
searchFiles( dirPath );
}
void主窗口::on_lineEditSourceFolder_textChanged(const QString&arg1)
{
//qDebug()看起来像是QT中的一个bug。请查看QDir.isRoot()
的源代码,然后提交bug报告
但是QT可能会显示一个解决方案。请尝试更改此选项:
QString dirPath = dir.absolutePath();
进入
以下是isRoot()
行为:
在c
在c:
在c:\
因此,当您输入c:
,isRoot()
返回false,并将调用searchFiles()
。当您随后按\
,isRoot()
返回true
,但您没有调用model->clear()
返回之前。这给人的印象是c:\
仍然调用searchFiles()
因此,您应该在返回前进行清理:
if (dir.isRoot() )
{
qDebug() << arg1 << " is root";
model->clear();
return;
}
PS:我的邮箱上既没有安装windows也没有安装QT,因此无法检查我自己。
if (dir.isRoot() )
{
qDebug() << arg1 << " is root";
model->clear();
return;
}
void MainWindow::on_lineEditSourceFolder_textChanged(const QString &arg1)
{
QString temp = arg1 + '\\';
QDir dir( temp ) ;
....