1

在初始化一个 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 对象系统在不同文件夹/命名空间中具有相同名称的类存在问题。

如前所述:解决方法是重命名这些类之一。

显示损坏的 d 指针

4

1 回答 1

0

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

如果那不能解决问题,我认为您应该使用更多信息来更新问题,以了解您为解决这种情况所做的工作,也许有人可以提供更好的建议,例如 lineedit 添加的时间比其他内容晚的小部件?

于 2013-05-24T09:09:02.953 回答