我不这样认为,我认为该函数终止时会删除内存,但我想向社区咨询。
void MainWindow::editCopy (void)
{
QWidget *pqwgtFocus = QApplication::focusWidget();
if (pqwgtFocus != 0)
{
QApplication::postEvent ( pqwgtFocus,
new QKeyEvent ( QEvent::KeyPress,
Qt::Key_C,
Qt::ControlModifier
)
);
QApplication::postEvent ( pqwgtFocus,
new QKeyEvent ( QEvent::KeyRelease,
Qt::Key_C,
Qt::ControlModifier
)
);
}
return;
}
答案 0 :(得分:6)
是的,该应用程序将获得所有权,并且绝对安全。
该事件必须在堆上分配,因为发布事件队列将拥有该事件的所有权,并在发布后将其删除。发布事件后,访问它是不安全的。
答案 1 :(得分:3)
这里没有内存泄漏。 QApplication::postEvent
拥有指针的所有权,并在完成后对其调用delete
:
该事件必须在堆上分配,因为发布事件队列将拥有该事件的所有权,并在发布后将其删除。发布事件后,访问它是不安全的。
请注意,这确实是糟糕的界面。您必须明确检查文档以确保正确使用了该功能。相反,如果它接受了QScopedPointer
,那么您只要看一下函数签名,就可以知道postEvent
正在获得指针的所有权。
答案 2 :(得分:1)
O(n)
获取事件的记录,并在事件完成后postEvent
对其进行记录。没有泄漏。