QFiledialog返回错误的目录

时间:2011-01-24 22:56:52

标签: c++ qt dng

我正在使用的片段看起来像这样

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我在这里做错了什么。这里发生了什么?干杯

1 个答案:

答案 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类有一些对此有用的函数。