【问题标题】:Qt application crashing on exitQt 应用程序在退出时崩溃
【发布时间】:2012-05-07 02:57:31
【问题描述】:

我有一个用 C++ 编写的带有 Qt 库的 GUI。对于我的应用程序,我使用了 TreeView 对象。为了使这个对象的重用变得容易,我制作了一个模板类,我的 QObjects 可以从中继承。由于 moc 不能与模板类一起使用,所以我制作了这样的类:

class Tree : public QObject, public TreeTemplate<TreeType, TreeItemType>
{
     Q_OBJECT
};

这样只允许 Tree 类使用 moc(TreeTemplate 不继承 QObject 或使用 Q_OBJECT 宏),同时获得模板的好处。

我的问题是,在退出我的应用程序时,我的应用程序崩溃,没有失败(即使我调用 exit 并跳过 QApplication 清理)。我认为生成的 moc 类可能存在问题,它们的“静态元对象”

我无法使用 valgrind,因为使用了无法处理的 __ASM__。 :-(

有谁知道我使用继承自模板类的模板 Qt 类 (+moc) 的设计是否会导致此问题?

崩溃发生在:libc.so 退出后。

【问题讨论】:

标签: c++ qt


【解决方案1】:

AFAIK,你的方法行不通。

moc 在 C++ 预处理器之前运行,这就是为什么QObject 和模板类不起作用 - 预处理器尚未生成类。您正在对类进行模板化,因此moc 的关于该类的数据将与在预处理器期间从中创建的任何模板类的签名不匹配。

【讨论】:

  • 那就不行了。你能告诉我们你代码的最后一行,在回溯中,它失败的地方吗?我很感激你不能使用 valgrind,但你的调试器至少会告诉你问题是从哪里开始的。
  • 如果您的评论是真的“该类将与在预处理器期间从它创建的任何模板类的签名不匹配”我认为它不会编译,它会编译并运行.这就是我的意思。它在破坏之前表现得非常好。我稍后会得到堆栈跟踪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多