在初始化一个 Qt 对话框后,返回指向一个 QLineEdit 的私有数据的指针被设置为 0。在生成的对话框的 setupUi() 内时,指针仍然有效。之后这个特定的 QLineEdit 的结构似乎被破坏了。
应用程序在调试器内部运行和没有调试器时都会崩溃。
单线程应用程序。
QtCreator 2.7.0。
CMake 项目。
MinGW 20120426 与 g++ 4.6.2(32 位应用程序):
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)
视窗 7 64 位。
'Locals and Expressions' 底部显示的另一个 QLineEdit 'kundenbestellcodeLineEdit' 看起来不错。
问:有没有人也经历过这种情况,并且知道为什么会发生这种情况?
我有一些其他用例和其他运行良好的对话框 - 那么为什么只有这一个会产生问题?
我可以使用 g++ 4.7.2 在 Linux Debian Wheezy 上发布版本来重现这一点。
新信息:我有第二个 QDialog 同名 'Dialog_Auswahl_des_Geraetemodells' 驻留在不同的用例目录(文件系统)和不同的命名空间中。从链接阶段删除第二个对话框时,不会发生崩溃。
更多信息:如果我重命名第二个对话框类,则不再发生崩溃。我已经验证了链接器符号,以确保对话对象文件(Dialog_ .o、moc_Dialog_ .o)提供了预期的符号。我还验证了可以在 moc_*.cxx 文件中看到 Usecase 路径。
由于此问题仅在运行时发生,因此必须假设 Qt 对象系统在不同文件夹/命名空间中具有相同名称的类存在问题。
如前所述:解决方法是重命名这些类之一。