C++ 如何在windows/qt中筛选目录是否为根目录?

C++ 如何在windows/qt中筛选目录是否为根目录?,c++,qt,C++,Qt,当用户键入path时,我显示文件夹的内容(仅显示某些文件)。如果它是根文件夹(c:\drive),我不想显示内容,因为它会搜索所有子目录,这会花费太长时间,而且不需要 问题是,如果我在编辑框中键入“c:\\”,它仍然会搜索c:\drive,但QDir::isRoot()不会选择它。我怎样才能准确地捕捉到可能是根路径甚至是程序文件路径的路径?我正在使用Windows7 void MainWindow::on_lineEditSourceFolder_textChanged(const QStrin

当用户键入path时,我显示文件夹的内容(仅显示某些文件)。如果它是根文件夹(c:\drive),我不想显示内容,因为它会搜索所有子目录,这会花费太长时间,而且不需要

问题是,如果我在编辑框中键入“c:\\”,它仍然会搜索c:\drive,但QDir::isRoot()不会选择它。我怎样才能准确地捕捉到可能是根路径甚至是程序文件路径的路径?我正在使用Windows7

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 ) ;
      ....