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

时间:2014-03-31 13:47:30

标签: c++ qt qfiledialog

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

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当前所在目录的绝对路径?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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