首页 > 解决方案 > 使用 QFileDialog 程序几秒钟后崩溃

问题描述

我正在制作应用程序来提高我们公司的生产力。它读取整个 .csv 文件并将其内容放入 .pdf 格式的表格中。我使用 QT 作为 GUI 库和 PoDoFo 作为 .pdf 库。

问题是,在我让用户选择 .csv 文件以从中获取数据和保存生成的 .pdf 的路径后,程序在两分钟左右内崩溃。它因情况而异。我能够将问题“跟踪”到 QFileDialog。

如果我在堆栈上创建它,或者动态地仍然发生同样的事情并不重要。从您在打开文件对话框的 GUI 中按下“选择”的那一刻起,程序将在大约两分钟内崩溃,这在 Visual Studio Community 2017 中给出

在此处输入图像描述

我能够创建简约的代码来重现错误。我正在使用 Windows 7 Pro,Microsoft Visual Studio Community 2017,编译 32 位调试

.h,.cpp,.ui 文件:https ://www.dropbox.com/sh/cf057p4lnumesol/AAD39zDJnrxGChXAuE7y27Kra?dl=0

任何帮助将不胜感激,我花了 5 天的空闲时间试图解决这个问题。谢谢

编辑:我知道“框架不在模块中”意味着 Visual Studio 没有针对发生崩溃的代码部分的调试符号,因为我自己没有构建 qt,这是有道理的。

EDIT2:我正在使用 QT Visual Studio Tools 插件版本 2.3.2 Qt 版本是 5.12.2

EDIT3:仅在为 32 位架构编译时才会发生崩溃。

EDIT4:只有在使用本机文件对话框时才会发生崩溃。如果QFileDialog::DontUseNativeDialog设置了选项,则不会发生崩溃。

标签: c++qtcrashqfiledialog

解决方案


不确定这是否相关,但我遇到了一个问题,如果我给出 FileDialog 的路径,它会在几秒钟内消失,因为它以某种方式将其解释为网络路径。为了解决这个问题,我给了它一个前缀为"file://". 为了做到这一点,我这样做了:

QUrl().fromLocalFile(cell_info->progDir()).toString()

原来的路径来自cell_info->progDir(). 不知何故,该路径是常规的 Windows 特定路径。一旦我将它包装在 from LocalFile 调用中,它就会为我使用它的所有平台生成我需要的东西。

再说一次,我不知道这是否与您的问题有关,但这听起来很可疑,就像它在某些事情的背景中逐渐消失一样。如果这不相关,请随意忽略。


推荐阅读