我正在使用的片段看起来像这样
QDir lastDir;
QFileDialog dial(this);
dial.getOpenFileName(this,
tr("Open File"),
QString("/home"),
tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));
lastDir = dial.directory();
qDebug() << lastDir;
无论我最终进入哪个目录,输出都是完全错误的。但是,错误的目录始终是相同的。
AFAICT我在这里做错了什么。这里发生了什么?干杯
答案 0 :(得分:3)
getOpenFileName()
是一个静态函数,它立即打开一个“文件选择器”对话框,并在用户完成对话后返回“用户选择的现有文件”。您可以像这样使用它(请注意使用::
和类名QFileDialog
而不是对象名称):
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"),
QString("/home"),
tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));
directory()
是非静态的,并返回“当前正在对话框中显示的目录”。该对象仍处于打开状态时调用此函数,它适用于静态调用未涵盖的用例。
这里发生的事情是你已经实例化了一个对象,在其上调用了一个静态函数(它不会影响它的状态),然后调用directory()
来反映对象的原始状态,可能是工作目录。相反,您需要将getOpenFileName()
调用的返回值存储在变量中,如上所示。
如果您想要让用户只选择一个目录,您可以考虑使用getExistingDirectory()
。或者,如果要从文件名中提取目录,QDir
类有一些对此有用的函数。