I have a class that inherits from QFileDialog
. In the constructor, I call setDirectory
and pass in the last directory visited (which the class keeps track of; see code below). On Windows, this works fine. And if I show the dialog multiple times, it is internally smart enough to resume at the last location (e.g. where the user saved a file before). This is the desired behavior.
On Ubuntu 12.04 (GCC 4.8 compiler), on the other hand, the system does not automatically resume where last left off if I call showFileDialog
multiple times. So I tried adding the setDirectory
call within that function as commented below, but that didn't change anything. Furthermore, if I take out setDirectory
from the constructor so it is only called in showFileDialog
, the file dialog opens to the folder from which the program was run. (i.e. setDirectory didn't work.) Subsequent calls to showFileDialog
will open a file dialog starting in the directory requested.
So it seems like the call has a delayed effectiveness. Is this a Qt bug, or mine? Either way, how can I get the setDirectory
call to be effective?
Example code:
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();
//...
}
Workaround found:
I happen to set the dialog title (
setWindowTitle()
) every time I open aFileDialog
. If I connect to theQFileDialog::windowTitleChanged
signal and callsetDirectory
within the slot, it is effective.This is an unintuitive workaround though, so I am open to better answers.