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

C++ QFileDialog::getOpenFileName在调试时崩溃,显然是由项目名称引起的?,c++,qt,debugging,getopenfilename,C++,Qt,Debugging,Getopenfilename,我遇到了一个让我很困惑的问题。我正在使用QtCreator3.1.2,在Windows7上使用Qt5.3,使用MSVC10.0编译器和Windows8.1调试工具中的CDB。(不确定我是否应该寻找Windows7特定的调试器,但到目前为止我还没有遇到任何问题) 问题是:当我在调试时尝试使用QFileDialog::getOpenFileName()时,程序会抛出一个异常 次品停止,因为它触发了异常 在线程0中停止:异常位于0x745f7736,代码:0xc0000005:读取访问冲突位于:0x0

我遇到了一个让我很困惑的问题。我正在使用QtCreator3.1.2,在Windows7上使用Qt5.3,使用MSVC10.0编译器和Windows8.1调试工具中的CDB。(不确定我是否应该寻找Windows7特定的调试器,但到目前为止我还没有遇到任何问题)

问题是:当我在调试时尝试使用QFileDialog::getOpenFileName()时,程序会抛出一个异常

次品停止,因为它触发了异常

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

发布/调试构建并不重要。如果我正在运行调试器,它会崩溃。如果我不是,那就行了。我尝试了很多不同的方法来找出为什么会发生这种情况-我将getOpenFileName移动到程序的不同部分,我尝试更改/删除函数调用中的参数,除了显示此文件对话框所需的最小值之外,我基本上剥离了所有代码—一个QApplication和一个主窗口,当单击菜单栏项时,该窗口调用getOpenFileName()。什么都没用

然后我创建了一个基本相同的新项目。令人费解的是,这起作用了。所以,后来我做了很多事情,从我的主项目复制东西,直到它再次崩溃,我最终发现了问题:显然,这是由.pro文件中的“TARGET”设置的可执行文件名。如果将其设置为PrimeWorldEditor(我的应用程序的名称),它将崩溃。如果我把它换成别的东西,它就行了

所以我的第一个想法是,有一些遗留文件与某个地方的可执行文件共享它们的名称,从而导致问题。然而,清除构建文件夹、重建项目以及其他任何事情都没有帮助

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

编辑:有几个人在询问代码,下面是一个程序崩溃的例子。同样,这仅在目标可执行文件名设置为PrimeWorldEditor的情况下运行调试器时才会崩溃。在其他情况下,它会按预期工作并打开getOpenFileName()对话框

#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QFileDialog::getOpenFileName();
返回0;
}
我认为这个问题可能与我的设置有关,所以我不确定它是否容易复制


编辑2:我想补充一点,我确实花了一段时间在谷歌上搜索,试图找到与这个问题相关的任何信息。我确实找到了一些人,他们似乎和我有同样的问题,但在那些帖子上没有任何解决办法。

嗯,哇,好的。出于某种原因,我在我的调用堆栈中注意到DropboxExt_24。所以我卸载了Dropbox应用程序,突然间,一切都正常了。重新安装后,一切正常,所以问题解决了,我想


我一直在Dropbox上托管我的代码以保持备份,不确定这是否与问题有关。

我也遇到了同样的问题,解决方案是卸载git软件,它在windows资源管理器中创建了上下文菜单

我遇到的问题是,当使用
QFileDialog::getOpenFileName()
时,程序在Visual Studio 2013调试器中崩溃:

读取位置0xFEEEFEEE时发生访问冲突

当我在没有调试器的情况下运行程序,或者在项目配置->调试器-> 与环境组合=“否”

我重新安装了VisualStudio、Qt,但没有任何帮助

最后,我删除了当天安装的git软件,并卸载了该软件;然后,程序在调试器中不再崩溃


我使用的是Windows 64位计算机,但使用32位运行Qt程序。git软件在windows资源管理器中有一个上下文菜单,不知何故,它干扰了QFileDialog,并导致了问题。

您好,您知道它在程序中的何处崩溃吗?有时候是愚蠢的错误!请毫不犹豫地放入代码的一小部分。每当调用getOpenFileName()时,无论它在程序中的何处,它都会崩溃,如果调用的插槽函数不调用getOpenFileName(),则它们可以完美地工作。这一点,再加上完全相同的代码与不同的可执行文件名完美结合的事实,似乎向我表明代码没有任何问题,这就是为什么我没有在文章中包含任何代码片段的原因。请在调用
getOPenFileName()
的地方提供一些代码。我添加了一个代码段。您确定在没有事件循环的情况下使用
QFileDialog::getOPenFileName
安全吗(
返回a.exec();
)???
#include <QApplication>
#include <QFileDialog>

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