0

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

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();
    }
}

你能告诉我我做错了什么吗?如何获取filedialog当前所在目录的绝对路径?

4

2 回答 2

1

QFileDialog 有几个静态方法,它们确实返回选定的文件和当前目录 getExistingDirectory、getOpenFileName、getOpenFileNames、getSaveFileName。您可能想要使用这些静态函数之一。另一种选择是继承 QFileDialog 并覆盖 exec 方法以返回当前目录。http://qt-project.org/doc/qt-4.8/qfiledialog.html

于 2014-03-31T13:55:08.923 回答
0

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

请注意,您编写的代码是在创建一个 NEW QFileDialog,这就是您每次都获得相同目录的原因。您仅使用此对话框一次,并且在使用this对象(可能是主窗口)时将其删除。

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

于 2014-03-31T16:25:27.263 回答