Qt之connect接口初体验

本文主要介绍Qt的connect接口

Qt4版本接口

  • sender为信号发送者;
  • receiver为槽接收者;
  • 使用字符串作为信号槽,使用灵活,但对新手不友好,不能再编译期检查,容易在运行中出错。
    1
    2
    3
    connect(const QObject *sender, const char *signal, 
    const QObject *receiver, const char *method,
    Qt::ConnectionType type = Qt::AutoConnection)

Qt5版本新增接口

  • sender为信号发送者;
  • receiver为槽接收者;
  • 使用强类型作为信号槽参数,能在编译期检查错误,提高容错性。
    1
    2
    3
    connect(const QObject *sender, const QMetaMethod &signal, 
    const QObject *receiver, const QMetaMethod &method,
    Qt::ConnectionType type = Qt::AutoConnection)

连接属性

ConnectionType 含义
Qt::AutoConnection (默认)如果接收器位于发出信号的线程中,则使用Qt::DirectConnection。否则,将使用Qt::QueuedConnection。连接类型是在发出信号时确定的。
Qt::DirectConnection (直接连接)当信号发出时,立即调用插槽。槽在信号线程中执行。
Qt::QueuedConnection (队列连接)当控件返回到接收器线程的事件循环时,将调用槽。槽在接收器线程中执行。
Qt::BlockingQueuedConnection (阻塞队列连接)与Qt::QueuedConnection相同,只是信号线程会一直阻塞,直到槽返回。如果接收器位于信号线程中,则不得使用此连接,否则应用程序将死锁。
Qt::UniqueConnection (单一连接)相同信号连接则只会连接第一次

关于更多

  • 文章首发于微信公众号你才小学生(nicaixiaoxuesheng)
  • 后续更新于Qtbig哥(qtbig.com)