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

     
  • 相关阅读:
    沃尔玛的问题
    为什么没有“128位”的通用处理器
    用户模式驱动模型(UMDF)简介
    Live Space的谢幕
    Cheap HDD bracket
    让 UV4 支持STC 单片机
    SQLServer 分组查询相邻两条记录的时间差
    ERP采购系统流程
    C++运算符的优先级和结合性
    Entity Framework 4.1延时加载与贪婪加载之我的理解和数据库中如何存入图片
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/2105452.html
Copyright © 2011-2022 走看看