QFileDialog 在 close/destructor 时冻结(选择文件或取消)
QFileDialog freezes on close/destructor (with selected file or cancel)
我正在使用 Ubuntu 15.04 和相应的 qt pakage 5.4 在 qt 中开发应用程序。出于某种原因,在 QFileDialog
(甚至取消)中选择一个文件后,应用程序会莫名其妙地冻结。
我在网上发现了一些类似的主题,但大多数都与 qt 5.1 和(非)本机 QFileDialog
s 中现已解决的错误有关。
然后我发现这不仅仅与我自己的应用程序有关 - 现在即使 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。
我现在无法重现这两个文件中的哪一个导致了死锁。
希望这对遇到类似情况的人有所帮助!
我正在使用 Ubuntu 15.04 和相应的 qt pakage 5.4 在 qt 中开发应用程序。出于某种原因,在 QFileDialog
(甚至取消)中选择一个文件后,应用程序会莫名其妙地冻结。
我在网上发现了一些类似的主题,但大多数都与 qt 5.1 和(非)本机 QFileDialog
s 中现已解决的错误有关。
然后我发现这不仅仅与我自己的应用程序有关 - 现在即使 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。
我现在无法重现这两个文件中的哪一个导致了死锁。
希望这对遇到类似情况的人有所帮助!