0

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

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

4

1 回答 1

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

于 2011-01-24T23:39:30.800 回答