zoukankan      html  css  js  c++  java
  • QT信号和槽

    今天看了一点QT相关的代码,想要弄明白client application中QCanvas的derived class(那里是获取事件信息的源头)是何时被创建并注入到QT中去的。顺便了解了些QT信号和槽的知识。

    note down:

    1. 首先,QT signal 和slot都是QT自定义的东西,非C++所有。那么包含有这些玩意的h和cpp文件是如何编译的呢?分下面几步:

    1)调用QT自家的moc编译工具对这些玩意进行解析进而生成标准c++编译器支持的代码。 (A.h/cpp) -> (A.moc.h/cpp)

    2)把A.moc.h/cpp交给C++编译器进行编译。

    More: 

    元对象编译器 moc(meta object compiler)对 C++ 文件中的类声明进行分析并产生用于初始化元对象的 C++ 代码,元对象包含全部信号和槽的名字以及指向这些函数的指针。

    moc 读 C++ 源文件,如果发现有 Q_OBJECT 宏声明的类,它就会生成另外一个 C++ 源文件,这个新生成的文件中包含有该类的元对象代码。例如,假设我们有一个头文件 mysignal.h,在这个文件中包含有信号或槽的声明,那么在编译之前 moc 工具就会根据该文件自动生成一个名为 mysignal.moc.h 的 C++ 源文件并将其提交给编译器;类似地,对应于 mysignal.cpp 文件 moc 工具将自动生成一个名为 mysignal.moc.cpp 文件提交给编译器。

    2. signal可以理解为event (valueChanged, clicked),slot可以理解为事件响应函数。在QT UI设计器中工作时,不需要显式的去关联比如一个menu的事件由哪个slot来响应。这里的关联是通过规则的slot函数名来做到的。比如:你在UI里加个了menu叫ActiveNew;只要你写好一个on_ActiveNew_Triggered()的slot,ActiveNew的triggered signal就自动和这个slot连接起来了。这件事情是调用QMetaObject::connectSlotsByName干的。

    参考: QT 的信号与槽机制介绍

     
  • 相关阅读:
    java算法:构建块
    和菜鸟一起学linux总线驱动之初识smartcard操作过程
    java算法:算法分析事例
    java算法:数组
    网上交易 Q币冲击人民币?
    一段搞笑代码,让网页上所有图片飞起来转圈
    黑客系列教程之暴力注入Explorer
    一段搞笑代码,让网页上所有图片飞起来转圈
    巧妙破解开别人ASP木马密码的方法
    巧妙破解开别人ASP木马密码的方法
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/2105452.html
Copyright © 2011-2022 走看看