相关疑难解决方法(0)

QFileDialog::getOpenFileName 调试时崩溃,显然是由项目名称引起的?

我遇到了一个让我非常困惑的问题。我在 Windows 7 上使用 Qt Creator 3.1.2 和 Qt 5.3,使用 MSVC 10.0 编译器和 Windows 8.1 调试工具中的 CDB。(不确定我是否应该寻找特定于 Windows 7 的调试器,但到目前为止我还没有遇到任何问题)。

问题:当我在调试时尝试使用 QFileDialog::getOpenFileName() 时,程序会引发异常。

下级停止了,因为它触发了异常。

通过以下方式在线程 0 中停止:异常位于 0x745f7736,代码:0xc0000005:读取访问冲突位于:0x0,标志=0x0(第一次机会)。

发布/调试构建并不重要。如果我运行调试器,它就会崩溃。如果我不是,它就有效。我尝试了很多不同的事情来试图弄清楚为什么会发生这种情况 - 我将 getOpenFileName 移动到程序的不同部分,我尝试更改/删除函数调用上的参数,我基本上删除了除显示此文件对话框所需的最低限度是一个 QApplication 和一个在单击菜单栏项时调用 getOpenFileName() 的主窗口。什么都没起作用。

然后我创建了一个基本上相同的新项目。令人费解的是,这竟然奏效了。所以后来进行了很多混乱,并从我的主项目中复制了一些东西,直到它再次开始崩溃,我最终发现了问题:显然,它是 .pro 文件中“TARGET”设置的可执行文件名称。如果它设置为 PrimeWorldEditor(我的应用程序的名称),它就会崩溃。如果我将其更改为其他内容,它就会起作用。

所以我的第一个想法是,存在与可执行文件共享名称的剩余文件,从而导致问题。但是,清除构建文件夹、重建项目以及其他任何方法都没有帮助。

我现在已经不知道什么可能导致问题了,并且我尝试通过搜索找到与可执行文件共享名称或指向它的任何其他文件,但失败了。如果有人知道问题可能是什么,我将非常感谢您的帮助。我现在可以通过更改可执行文件的名称来解决这个问题,但我真的很想找出发生这种情况的原因并修复它。

编辑:有些人要求提供代码,所以这里有一个程序崩溃的示例。再次强调,只有在目标可执行文件名称设置为 PrimeWorldEditor 的情况下运行调试器时才会崩溃。在其他情况下,它会按预期工作并打开 getOpenFileName() 对话框。

#include <QApplication>
#include <QFileDialog>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFileDialog::getOpenFileName();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为这个问题可能与我的设置有关,所以我不确定它是否可以轻松重现。

编辑2:我想补充一点,我确实花了一段时间谷歌搜索来尝试找到与该问题相关的任何信息。我确实找到了几个似乎和我有同样问题的人,就像这篇文章一样,但这些帖子上没有任何解决方案。

c++ debugging qt getopenfilename

5
推荐指数
1
解决办法
3564
查看次数

标签 统计

c++ ×1

debugging ×1

getopenfilename ×1

qt ×1