程序让生活更美好

半亩方塘 天光云影

  C++博客 ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  55 随笔 :: 4 文章 :: 202 评论 :: 0 Trackbacks
现在在学习QT界面开发,在windows环境下装了vc6和QT3.3.4版本的开发包,装好之后就可以在VC集成开发环境下产生一个工具栏进行QT开发了。在学习书上例子的时候,总是有些代码中要使用到Q_OBJECT宏,这样才可以使用自定义的signal还有slot了,不过试了好多次都编译不成功,好像是需要什么moc编译,真是晕,书上也没有说这个,那些自带的例子都是可以编译的,直接用工具栏上面的那个moc也不管用,要是你知道你就告诉我下怎么用。

查了下资料,moc就是元对象编程。

元对象编译器读取一个C++源文件。如果它发现其中的一个或多个类的声明中含有Q_OBJECT宏,它就会给这个使用Q_OBJECT宏的类生成另外一个包含元对象代码的C++源文件。尤其是,元对象代码对信号/槽机制、运行时类型信息和动态属性系统是需要的。
一个被元对象编译器生成的C++源文件必须和这个类的实现一起被编译和连接(或者它被包含到(#include)这个类的源文件中)。
如果你是用qmake来生成你的Makefile文件,当需要的时候,编译规则中需要包含调用元对象编译器,所以你不需要直接使用元对象编译器。

这里提供一种方法:类的声明放在一个头文件(.h文件)中
如果在上述的文件myclass.h中发现类的声明,元对象编译器的输出文件将会被放在一个叫moc_myclass.cpp的文件中。这个文件将会像通常情况一样被编译,作为对象文件的结果是moc_myclass.o(在Unix下)或者moc_myclass.obj(在Windows下)。这个对象接着将会被包含到一个对象文件列表中,它们将会在程序的最后连编阶段被连接在一起。

然后在
(1)在FileView视图中 右键点击需要产生MOC文件的头文件(就是类中包含Q_OBJECT宏,如果没有这个宏就不需要产生MOC文件)

(2)在右键菜单中选择Setting...

(3)选择Custom Build,在Commands栏中输入:
%QTDIR%\bin\moc.exe $(InputDir)\$(InputName).h -o $(InputDir)\moc_$(InputName).cpp

Outputs中输入:
$(InputDir)\moc_$(InputName).cpp

(4)然后右键这个头文件编译


(5)最后生成一个 moc编译产生的cpp源文件


这样编译时就会在当前工程目录中自动生成MOC文件了

本文参考 qt文档以及http://www.qobject.com/read.php?fid=46&tid=2296&toread=1 的文章。

谢谢!



posted on 2007-08-13 21:32 北风之神007 阅读(3439) 评论(0)  编辑 收藏 引用 所属分类: QT

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理