• QT Slot/Signal


    QT的Slot/Singal-槽/信号

    1、Usage/使用方法

    所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含 信号/signal槽/slot。当对象改变其状态时,信号就由该对象发射 emit 出去,这就是 对象/object所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。

    你可以将很多 信号/signal单个 槽进行 连接/connect,也可以将单个的信号多个槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。

    总结slot函数signal函数参数 需要一一对应。

    2、Principle/Truth/Implementation/实现机制

    ①原理

    Using the Meta-Object Compiler (moc)
    Why Doesn't Qt Use Templates for Signals and Slots?
    How does Qt implement signals and slots?

    ②QT内部的实现代码(qobjectdefs.h)

    Q_CORE_EXPORT const char *qFlagLocation(const char *method);
    
    #define QTOSTRING_HELPER(s) #s
    #define QTOSTRING(s) QTOSTRING_HELPER(s)
    #ifndef QT_NO_DEBUG
    # define QLOCATION "" __FILE__ ":" QTOSTRING(__LINE__)
    # ifndef QT_NO_KEYWORDS
    #  define METHOD(a)   qFlagLocation("0"#a QLOCATION)
    # endif
    # define SLOT(a)     qFlagLocation("1"#a QLOCATION)
    # define SIGNAL(a)   qFlagLocation("2"#a QLOCATION)
    #else
    # ifndef QT_NO_KEYWORDS
    #  define METHOD(a)   "0"#a
    # endif
    # define SLOT(a)     "1"#a
    # define SIGNAL(a)   "2"#a
    #endif
    
    
    

    问题:QT的信号和槽可否是函数,函数的时候传递了什么,起到了什么作用?

    參考:
    1、QT 的信号与槽机制介绍
    2、QT Signals and slots

  • 相关阅读:
    webkit特有的css属性
    js apply/call/caller/callee/bind使用方法与区别分析
    canvas
    seajs
    div 等高
    js常用函数
    浮动元素水平居中
    JavaScript的9个陷阱及评点
    Touch Event
    js跨域问题
  • 原文地址:https://www.cnblogs.com/xuanyuanchen/p/5949372.html
Copyright © 2020-2023  润新知