我想将预定义和自定义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/