自定义事件处理程序中的Qt QApplication::processEvents()

自定义事件处理程序中的Qt QApplication::processEvents(),events,qt,event-handling,long-running-processes,Events,Qt,Event Handling,Long Running Processes,是否可以在事件处理程序中调用QApplication::processEvents(),其中有一个较长的进程。我的程序以Segfault终止。我的代码是这样的: void MyApplication::customEvent(QEvent* event) { if(event->type() == UserEventCustom) { for(int i = 0; i < 99999; ++i) { QApplication::processEv

是否可以在事件处理程序中调用QApplication::processEvents(),其中有一个较长的进程。我的程序以Segfault终止。我的代码是这样的:

void MyApplication::customEvent(QEvent* event)
{
  if(event->type() == UserEventCustom)
  {
    for(int i = 0; i < 99999; ++i)
    {
       QApplication::processEvents();
       doSomething();
    }

    event->accept();
  }
}
void MyApplication::customEvent(QEvent*事件)
{
如果(事件->类型()==UserEventCustom)
{
对于(int i=0;i<99999;++i)
{
QApplication::processEvents();
doSomething();
}
事件->接受();
}
}

我怀疑Ton van den Heuvel(从评论中)认为堆栈溢出是正确的


然而,在我的公司,我们发现最好避免processEvents()。我们的经验表明processEvents()会导致崩溃,我们试图避免使用它。我会问你自己,你是否可以重构你的代码而不用processEvents()调用。例如,您可能会生成一个线程来进行处理。

您应该发布一个完整的示例,这部分代码没有显示任何问题。您是否尝试在堆栈跟踪出现故障时检查它?从转储中是否不清楚它在Qt中的确切位置(顺便说一句,不是Qt)以及发生的原因?可能是Qt中的一个无关错误,单独调用processEvents()是可以的,这里似乎没有问题。我怀疑堆栈溢出,这可能通过在繁忙循环前面移动
event->accept()
来解决。。。