被Qt的事件循环系统困惑了吗?

时间:2014-11-30 13:29:22

标签: c++ qt

文件说Qt的事件循环是FIFO。 但我对文档有点困惑,所以如果: 我有两个按钮,第一个按钮会执行:

on_click_button_one(){
    list.append(new_element);
}

第二个会做:

on_click_button_two(){
  while(!list.empty()){
    list.remove_top();
  }
}

由于列表可能非常大,因此清除列表需要一些时间。但是如果我在清算过程中点击按钮一下,会发生什么? 两个on_click_button函数在同一个线程中。

1 个答案:

答案 0 :(得分:1)

没什么,因为你的GUI不会与用户互动,因为所有主线程都会删除列表,如果需要5秒,那么5秒将会GUI秒冷冻。

如果您在每次迭代时都会调用processEvents(),为了解冻GUI,那么您应该只是禁用第一个按钮或使用QProgressDialog来显示操作进度。

主线程中的AFAIK函数和另一个线程中的函数可以同时执行(并行),但同一线程中的2个函数不能同时执行。如果您不使用std::threadQtConcurrentQThread之类的内容,那么我认为您可以确定这两个插槽位于一个线程中并且永远不会同时执行