【发布时间】:2015-09-02 00:22:57
【问题描述】:
我有一个继承自 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();
//...
}
【问题讨论】:
-
本机对话框可能有限制。尝试使用
DontUseNativeDialog选项。 -
我忘了说:我确实验证了 DontUseNativeDialog 可以正常工作,但我更愿意通过原生对话框保持 Ubuntu 的感觉。
标签: c++ qt user-interface qfiledialog