当我启动程序时,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当前所在目录的绝对路径?
答案 0 :(得分:1)
QFileDialog有几个静态方法可以返回所选文件和当前目录getExistingDirectory,getOpenFileName,getOpenFileNames,getSaveFileName。您可能希望使用其中一个静态函数。另一个选项是子类QFileDialog并覆盖exec方法以返回当前目录。 http://qt-project.org/doc/qt-4.8/qfiledialog.html
答案 1 :(得分:0)
您可以像其他人建议的那样用静态方法替换它,但我认为首先应该修复内存泄漏!
请注意,您编写的代码是创建新的QFileDialog
,这就是每次都获得相同目录的原因。您只使用此对话框一次,并在使用this
对象(可能是主窗口)时将其删除。
因此,要么使用静态版本,要么在主窗口类中创建一个字段,只创建一个对话框并在需要时重复使用。