Qt QFileDialog :: setDirectory在Ubuntu 12.04中的搞笑行为

时间:2015-06-16 23:56:19

标签: c++ qt user-interface qfiledialog

我有一个继承自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();
    //...
}

2 个答案:

答案 0 :(得分:0)

从上面的代码中不清楚您如何知道路径已更改。我不确定directory()是否对此负责。

考虑使用void QFileDialog::directoryEntered(const QString & directory)信号。

答案 1 :(得分:0)

找到解决方法:

每次打开setWindowTitle()时,我都会设置对话框标题(FileDialog)。如果我连接到QFileDialog::windowTitleChanged信号并在广告位中拨打setDirectory,则该广告有效。

这是一个不直观的解决方法,所以我愿意接受更好的答案。