为什么 QFileDiaglog 方法目录不显示当前目录?

Why doesn't QFileDiaglog method directory show the current directory?

本文关键字:显示 当前目录 QFileDiaglog 方法 为什么      更新时间:2023-10-16

当我启动程序时,文件对话框位于某个目录中。然后我移动到其他目录并选择一些文件。选择文件后,我尝试获取从中选择文件的当前目录。但它不会返回我当前目录,而是返回程序启动时文件对话框最初所在的原始目录。代码片段如下:

QFileDialog * fileDialog = new QFileDialog(this);
fileDialog->setFileMode(QFileDialog::ExistingFiles);
QListView* list = fileDialog->findChild<QListView*>("listView");
if(list)
{
    list->setSelectionMode(QAbstractItemView::MultiSelection);
}
QTreeView* tree = fileDialog->findChild<QTreeView*>();
if(tree)
{
    tree->setSelectionMode(QAbstractItemView::MultiSelection);
}
if(fileDialog->exec())
{
    if(fileDialog->selectedFiles().size()>0)
    {
        QDir dir = fileDialog->directory();
        fileDialog->update();
        qDebug()<<dir.absolutePath();
    }
}

你能告诉我我犯了什么错误吗?如何获取文件对话框当前所在目录的绝对路径?

QFileDialog 有几个静态方法,这些方法返回选定的文件和当前目录 getExistingDirectory、getOpenFileName、getOpenFileNames、getSaveFileName。您可能希望使用这些静态函数之一。另一个选项是子类 QFileDialog 并重写 exec 方法以返回当前目录。http://qt-project.org/doc/qt-4.8/qfiledialog.html

您可以像其他人建议的那样用静态方法替换它,但我认为首先您应该修复内存泄漏!

请注意,如果您编写代码,您正在创建一个新QFileDialog这就是为什么您每次都会得到相同的目录。此对话框仅使用一次,当this对象(可能是主窗口)时,它将被删除。

因此,要么使用静态版本,要么在主窗口类中创建一个字段,只创建一个对话框并在需要时重复使用它。