QFileDialog冻结关闭/析构函数(使用选定文件或取消)

时间:2015-08-07 11:06:47

标签: c++ qt ubuntu qt5.4

我正在使用Ubuntu 15.04以及各自的qt pakage 5.4开发qt中的应用程序。出于某种原因,在QFileDialog(或甚至取消)中选择文件后,应用程序将无处冻结。

我在网上发现了一些类似的主题,但大多数都关注qt 5.1和(非)原生QFileDialog中现已解决的错误。

然后我发现这不仅仅与我自己的应用程序有关 - 甚至qtcreator现在也会冻结离开QFileDialog

QFileDialog的析构函数中似乎存在死锁。

1 个答案:

答案 0 :(得分:2)

以下代码段来自qsettings.cpp(第1382行)void QConfFileSettingsPrivate::syncConfFile(int confFileNo)

QLockFile lockFile(confFile->name + QLatin1String(".lock"));
if (!readOnly) {
    if (!confFile->isWritable() || !lockFile.lock() ) {
        setStatus(QSettings::AccessError);
        return;
    }
}

事实证明,其他一些qt应用程序留下了一个锁定文件,导致所有其他应用程序的QFileDialog析构函数在上述lock调用中死锁。

我在我的主文件夹中和删除后搜索了.lock个文件 ./.config/QtProject.conf.lock以及与.config/USERNAME/APPTARGETNAME.conf.lock类似的第二个文件  QFileDialog效果很好,agian。

我刚才无法重现这两个文件中的哪一个确实导致死锁。

希望这可以帮助处于类似情况的任何人!