C ++ Qt - 当调用一个槽时,该函数是否被称为新线程?

时间:2012-08-20 05:53:44

标签: multithreading qt slot

当我点击do_something()时,我想知道函数my_button是否被视为新主题。

connect(my_button, SIGNAL(clicked), this, SLOT(do_something));

1 个答案:

答案 0 :(得分:8)

典型的信号/插槽行为是基于connection type确定的。如果未指定,则默认为Qt::AutoConnection,如果无法建立直接连接,将使用接收者的线程。

来自文档:

  

当控制返回到接收者线程的事件循环时,将调用该槽。插槽在接收器的线程中执行。

您可以在连接时更改connection type以更改行为:

connect(my_button, SIGNAL(clicked), this, SLOT(do_something),
    Qt::QueuedConnection); // always queue

由于您正在谈论发出信号的按钮,因此Qt::AutoConnection的默认连接类型意味着建立了直接连接并且do_something插槽将立即执行,就像它具有在单击按钮时直接调用。