我有一个从QFileDialog
继承的类。在构造函数中,我调用setDirectory
并传递上次访问的目录(该类跟踪该目录;请参见下面的代码)。在Windows上,这可以正常工作。而且,如果我多次显示该对话框,则该对话框内部足够智能,可以在最后一个位置(例如,用户之前保存文件的位置)恢复。这是所需的行为。
另一方面,在Ubuntu 12.04(GCC 4.8编译器)上,如果我多次调用showFileDialog
,系统不会自动从上次中断的位置继续恢复。因此,我尝试在函数中添加setDirectory
调用,如下所述,但这并没有改变。此外,如果我从构造函数中取出setDirectory
,因此仅在showFileDialog
中调用它,则文件对话框将打开到运行程序的文件夹。 (即setDirectory无效。)随后对showFileDialog
的调用将打开一个从所需目录开始的文件对话框。
因此,通话似乎延迟了有效性。这是Qt的错误,还是我的?无论哪种方式,如何使setDirectory
调用有效?
示例代码:
QString FileDialog::defaultDir = QDir::homePath();
FileDialog::FileDialog(QWidget *parentWindow /*, ...*/)
: QFileDialog(parentWindow)
{
setDirectory(defaultDir);
//...
}
QString FileDialog::showFileDialog()
{
// Adding setDirectory(defaultDir) here doesn't help.
if(!exec())
{
return QString::null;
}
defaultDir = directory().path();
//...
}
最佳答案
从上面的代码尚不清楚您如何知道路径已更改。我不确定directory()
对此负责。
考虑使用void QFileDialog::directoryEntered(const QString & directory)
信号。