我想将预定义和自定义QEvent都发送到Qt应用程序。
是将所需的事件分配在堆上,还是可以仅将指针传递给堆栈上的对象?

QKeyEvent stackevent(QEvent::KeyPress);
QKeyEvent* heapevent = new QKeyEvent(QEvent::KeyPress);

QEvent * event;
event = &stackevent; //valid ??
event = heapevent;
QCoreApplication()->notify(someobj, event);
delete heapevent; //valid? or lost ownership?

最佳答案



通常这并不安全,但是在这种情况下它是有效的,因为只有在某人处理(或不处理)该事件之前 notify 函数才会返回(这意味着stackevent在此操作中将是“有效的”)。



是的,这也是有效的,因为通常没有人应该持有指向QEvent的指针(当然要删除它)并且顺便说一句,它已经被处理了。

当使用 postEvent 时,的情况发生了显着变化:



好吧,我想在您的情况下使用堆栈分配并在出现任何可能的问题(将自动释放内存)的情况下将指针传递给它更合适。

关于c++ - QEvent所有权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30895304/

10-12 19:38