C++ QDialog在setupUi()之后尝试设置QLineEdit的setText()时崩溃

C++ QDialog在setupUi()之后尝试设置QLineEdit的setText()时崩溃,c++,qt,debugging,g++,qt-creator,C++,Qt,Debugging,G++,Qt Creator,初始化一个Qt对话框后,返回指向一个QLineEdit的私有数据的指针,并将其设置为0。在对话框生成的setupUi()中,指针仍然有效。之后,这个特定QLineEdit的结构似乎已损坏 应用程序在调试器内部运行和不运行调试器时都会崩溃 单线程应用程序 QtCreator 2.7.0 CMake项目 带有g++4.6.2(32位应用程序)的MinGW 20120426: Windows 7 64位 “局部变量和表达式”底部显示的另一个QLineEdit“kundenbestellcodeLine

初始化一个Qt对话框后,返回指向一个QLineEdit的私有数据的指针,并将其设置为0。在对话框生成的setupUi()中,指针仍然有效。之后,这个特定QLineEdit的结构似乎已损坏

应用程序在调试器内部运行和不运行调试器时都会崩溃

单线程应用程序

QtCreator 2.7.0

CMake项目

带有g++4.6.2(32位应用程序)的MinGW 20120426:

Windows 7 64位

“局部变量和表达式”底部显示的另一个QLineEdit“kundenbestellcodeLineEdit”看起来不错

Q:有没有人也经历过这种情况,并且知道为什么会发生这种情况?

我还有一些其他对话框的用例,它们运行得很好——那么为什么只有这一个会产生问题呢

我可以在Linux Debian Wheezy和g++4.7.2的版本中重现这一点

新信息:我有第二个QDialog,它的名称与“Dialog\u Auswahl\u des\u GerateModels”相同,位于不同的用例目录(文件系统)和不同的命名空间中。从链接阶段删除第二个对话框时,不会发生崩溃

进一步信息:如果重命名第二个对话框类,则不会再发生崩溃。我已经验证了链接器符号,以确保对话框对象文件(dialog.o、moc\u dialog.o)提供了预期的符号。 我还验证了用例路径可以在moc.*.cxx文件中看到

由于此问题仅在运行时发生,因此必须假设Qt对象系统在不同文件夹/名称空间中存在同名类的问题

如前所述:解决方案是重命名其中一个类


一般的答案是,您应该运行qmake,然后构建项目,以便为ui文件编译更新的生成代码


如果这还不能解决问题,我认为你应该更新问题,提供更多关于你在这种情况下所做的事情的信息,也许有人能给出更好的建议,比如lineedit添加的时间比其他小部件晚吗?

在错误发生的地方以及违规对象创建的地方张贴代码,还将堆栈跟踪作为文本发布-您的图片太难阅读。我已经这样做了(清理整个构建文件夹),但没有成功。对话框类是使用公式编辑器创建的,我没有更改生成的setupUi()。
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.6.2 (GCC)