c++ - QFileDialog 在关闭/析构函数时卡住(选择文件或取消)

标签 c++ qt ubuntu qt5.4

我正在使用 Ubuntu 15.04 和相应的 qt pakage 5.4 在 qt 中开发应用程序。出于某种原因,在 QFileDialog 中选择文件(甚至取消)后,应用程序会莫名其妙地卡住。

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

然后我发现这不仅仅与我自己的应用程序有关 - 现在即使 qtcreator 也会在离开 QFileDialog 时卡住。

QFileDialog 的析构函数中似乎出现了死锁。

最佳答案

以下片段来自 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。

我现在无法重现这两个文件中的哪一个导致了死锁。

希望这对处于类似情况的任何人都有帮助!

关于c++ - QFileDialog 在关闭/析构函数时卡住(选择文件或取消),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31876242/

相关文章:

python - 为什么我不能使用 QtSql (PyQT) 执行 SHOW PROCESSLIST?

linux - 将多轨+字幕 .MKV 转换为 MP4

c++ - 如何在小于 O(N) 的时间内解决这个问题?

c++ - 静态成员与静态常量成员实例化 - 有什么区别?

java - PyQt/Qt 是否有类似于 MigLayout 的布局管理器?

c++ - 如何决定是否为窗口的小部件创建一个单独的类?

linux - 无法理解 vagrant ssh 实现

php - 我写了一个记录所有输入和其他东西的错误记录脚本

c++ - 使用 C++ 编译函数模板时出错

c++ - C++ 中 const 的优点?