Qt QFileDialog::setDirectory 在 Ubuntu 12.04 中的有趣行为

Qt QFileDialog::setDirectory funny behavior in Ubuntu 12.04

本文关键字:setDirectory QFileDialog Ubuntu Qt      更新时间:2023-10-16

我有一个继承自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)信号。

找到

解决方法:

我碰巧每次打开FileDialog时都会设置对话框标题(setWindowTitle())。如果我连接到QFileDialog::windowTitleChanged信号并在插槽内呼叫setDirectory,它是有效的。

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