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

Béa*_*nac 5 qt multithreading slot

我想知道do_something()当我点击时该函数是否被视为新线程my_button.

connect(my_button, SIGNAL(clicked), this, SLOT(do_something));
Run Code Online (Sandbox Code Playgroud)

Kal*_*son 8

典型的信号/时隙行为是根据连接类型确定的.如果未指定,则默认为Qt::AutoConnection并且将使用接收者的线程,如果无法建立直接连接.

来自文档:

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

您可以在连接时更改连接类型以更改行为:

connect(my_button, SIGNAL(clicked), this, SLOT(do_something),
    Qt::QueuedConnection); // always queue
Run Code Online (Sandbox Code Playgroud)

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