我有一个继承自QFileDialog
的类。在构造函数中,我调用setDirectory
并传入最后访问的目录(类跟踪;见下面的代码)。在Windows上,这很好用。如果我多次显示对话框,则内部足够智能以在最后位置恢复(例如,用户之前保存文件的位置)。这是理想的行为。
另一方面,在Ubuntu 12.04(GCC 4.8编译器)上,如果多次调用showFileDialog
,系统不会自动恢复上次关闭的位置。所以我尝试在该函数中添加setDirectory
调用,如下所示,但这并未改变任何内容。此外,如果我从构造函数中取出setDirectory
,只在showFileDialog
中调用它,文件对话框将打开到运行程序的文件夹。 (即setDirectory不起作用。)对showFileDialog
的后续调用将在请求的目录中打开一个文件对话框。
因此呼叫似乎延迟了效果。这是Qt bug还是我的?无论哪种方式,我怎样才能使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();
//...
}
答案 0 :(得分:0)
从上面的代码中不清楚您如何知道路径已更改。我不确定directory()
是否对此负责。
考虑使用void QFileDialog::directoryEntered(const QString & directory)
信号。
答案 1 :(得分:0)
找到解决方法:
每次打开setWindowTitle()
时,我都会设置对话框标题(FileDialog
)。如果我连接到QFileDialog::windowTitleChanged
信号并在广告位中拨打setDirectory
,则该广告有效。
这是一个不直观的解决方法,所以我愿意接受更好的答案。