- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在我的 Qt 5.7 应用程序中遇到了exit code 255
。这发生在我添加自定义 QGestureRecognizer
之后。我调试了 Qt 的源代码,得出的结论是 QGestureManager
会自动处理所有 QGestureRecognizer
实例。导致问题的行位于创建和注册识别器的小部件的析构函数中:
Demo::~Demo() {
// delete other stuff
delete recognizer;
}
问题是 QGestureRecognizer
不支持(至少根据文档和查看构造函数的签名)Qt 中的 parent-child
关系,因为它不是派生自 QObject
(或该基本 Qt 类的任何子类)。这意味着不能将 parent
分配给其构造函数,因此 QCustomGestureRecognizer recognizer = new QCustomGestureRecognizer (this)
是不可能的。继续这一思路,这意味着必须通过调用 delete recognizer
手动触发析构函数。或者我想...
在我的应用程序生命周期结束时,QGestureManager
被调用。其中有一个名为 m_recognizers
的识别器列表。它包含一堆内置识别器(例如用于 Tap
手势的识别器)以及已注册的自定义识别器(在我的例子中它被注册为 257
) . QGestureManager
的析构函数遍历列表并删除其条目。
当 delete recognizer
行出现时,当 qDeleteAll(...)
(对于 m_recognizers
)到达自定义识别器的条目,因为它试图删除已经删除的内容。
在我注释掉小部件的析构函数中的 delete recognizer
行后,我不再遇到这个问题,但是我仍然不确定我是否没有在某处破坏我的代码。退出代码不是(如预期的那样)0
,但官方文档中完全没有关于如何处理识别器的信息。
有人遇到过这个问题吗?我不排除问题是由我的代码的其他部分引起的可能性,尽管考虑到它在调用默认 QWidget
析构函数时出现,这似乎不太可能。根据 C++ 标准,当首先继承一个类时,子类的析构函数被调用(在我的例子中,这是 Demo
自定义小部件 - 没有问题),然后是基类。
最佳答案
如果你使用
Qt::GestureType QGestureRecognizer::registerRecognizer(QGestureRecognizer *recognizer)
系统确实取得了对象的所有权,您不应该自己删除它。
文档摘录:
The application takes ownership of the recognizer and returns the gesture type ID associated with it.
关于c++ - QGestureRecognizer 自动被QGestureManager 销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38736059/
我是一名优秀的程序员,十分优秀!