Qt Quick快速入门之信号、槽

  信号和槽主要用于组件之间的通讯,相似于.net和java中的委托。java

  使用QObject::connect方法将信号与槽关联起来,而后信号的发起者发出信号,接受者中的槽函数就会执行。多线程

  好比connect(this,SIGNAL(start()),worker,SLOT(Start())),将当前类中start信号关联到worker对象的Start函数,当咱们调用emit this->start()时就发出信号,槽函数就会收到这个信号。函数

  connect函数还有第五个参数,这个参数决定信号什么时候传给槽,这里提一下,不过本人目前一直使用的默认值。this

  Qt::AutoConnection,默认值自动链接,当信号发起者与槽函数执行者在同一线程时,就会使用Qt::DirectConnection,反之则使用Qt::QueuedConnection。spa

  Qt::DirectConnection,直接相连,信号一发起槽函数立马执行,信号发起者与执行者在同一线程。.net

  Qt::QueuedConnection,队列式,信号发起者与执行者不在同一个线程,信号发起时,槽函数会等待调度。线程

  Qt::BlockingQueuedConnection,跟Qt::QueuedConnection同样,不一样的是信号发起时存在互斥锁,要等待槽函数返回,这样若是槽函数与信号函数在同一个线程中就会发生死锁(也就是一直堵在锁的位置,无法进入槽函数)。对象

  Qt::UniqueConnection,这个经过“或”跟上面的一块儿使用,表示一样的connection只能链接一次,好像没啥做用了,对象、信号、槽相同的connection屡次链接会失败。队列

  信号与槽要想断开链接,使用QObject::disconnect方法。it

  关于信号和槽的使用也就这么多,可是常常用,特别是在多线程里面,赶上槽函数没执行多是链接写错了或是槽函数所在线程哪里堵住了(好比死循环之类的)。

相关文章
相关标签/搜索