• 10060阅读
  • 3回复

qt源码里类似"public slots","singals"的关键字是怎么实现的? [复制链接]

上一主题 下一主题
离线viki
 
只看楼主 倒序阅读 楼主  发表于: 2008-09-26
— 本帖被 XChinux 执行加亮操作(2008-09-26) —
如下代码,里面所谓的区域声明“public slots”, "signals"……请问高手这些关键字是如何定义,如何使用的?我刚学c++没多久,实在是查不到相关资料。

  1. #include <QObject>
  2. class Counter : public QObject
  3. ...{
  4. Q_OBJECT
  5. public:
  6. Counter() ...{ m_value = 0; }
  7. int value() const ...{ return m_value; }
  8. public slots:
  9. void setValue(int value);
  10. signals:
  11. void valueChanged(int newValue);
  12. private:
  13. int m_value;
  14. };
离线XChinux

只看该作者 1楼 发表于: 2008-09-26
实际上是宏。。。。。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线viki
只看该作者 2楼 发表于: 2008-09-26
  是宏吗?可是为什么跟踪不到宏的定义? 我怎么觉得好像是给moc解析的?c++编译器本身不认识这些吧?!
离线viki
只看该作者 3楼 发表于: 2008-09-27
C++ GUI Programming with Qt 4  到手,第二章开始就有说明:

signals关键字实际上是一个宏。C++预处理器会在编译程序找到他之前把它转换出成标准C++代码。

原文如下:

The signals keyword is actually a macro. The C++ preprocessor converts it into standard C++ before the compiler sees it.

可能是我对“宏”的概念理解的太狭隘,脑子里的宏只是指那些用#define定义的,因为找不到定义所以很晕。signals,slots这些宏应该是由moc来做解析的,文中的“C++预处理器”估计指的也是moc而不是通常理解的C++预处理器吧。或许可以这样理解:qt在包含qt扩展(比如那些qt专有的关键字)的源码和c++编译器之间加了一个filter,这个filter的任务就是把包含qt扩展的源码解释成标准c++代码,然后再进行通常的c++编译

理解加猜测,如果有错麻烦拍砖告知。
快速回复
限100 字节
 
上一个 下一个