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 的信号与槽机制介绍

     
  • 相关阅读:
    在线支付模块小结
    Tomcat服务器热启动,修改项目源代码时不需要每次都重启Tomcat
    使用myeclipse进行hibernate快速开发
    hibernate的核心类和接口
    Hibernate手动配置
    Java的字符串md5加密和文件md5
    JDBC操作mysql数据库(SqlHelper类封装)
    yum报错[Errno 14] PYCURL ERROR 22(更换yum源)
    Ajax技术
    手动配置开发struts项目
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/2105452.html
Copyright © 2011-2022 走看看