Qt工程文件的moc配置

来源 http://blog.csdn.net/aladdina/archive/2009/03/17/3999787.aspx

在Visual Studio中通过moc给Qt配置预编译头文件(Predefined Headers)

 

  在Visual Studio中通过moc给Qt配置预编译头文件(Predefined Headers) 收藏
我创建Qt工程的方法是先用QCreator创建一个简单的程序,设计一些UI,然后用qmake把这个pro工程文件转成Visual Studio的vcproj工程文件。

这样的vcproj文件是没有使用预编译头的,当然可以很容易地的去Visual Studio中修改设置,这里我创建了一个名为pch.h的文件作为头文件。现在碰到的问题是,Qt使用moc来生成cpp文件并加入编译之中,比如你有一个mainwindow.h,然后moc会生成一个moc_mainwindow.cpp,如果这个cpp文件不引用指定的预编译头文件,则会出现这样的错误:

fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "pch.h"' to your source?

当然可以自己手动的将 #include "pch.h"加入该文件的前面,但是这个moc_mainwindow.cpp是动态生成的,在文件头部有一个很大的警告:WARNING! All changes made in this file will be lost!那如何让其自动加入pch.h呢?在网上查阅了一些英文的资料,居然没有人写。下面是我的方法:

我先进入命令行,然后用moc -help查看moc的帮助:

Usage: moc [options] <header-file> 
  -o<file>           write output to file rather than stdout  
  -I<dir>            add dir to the include path for header files  
  -E                 preprocess only; do not generate meta object code  
  -D<macro>[=<def>]  define macro, with optional definition  
  -U<macro>          undefine macro  
  -i                 do not generate an #include statement  
  -p<path>           path prefix for included file  
  -f[<file>]         force #include, optional file name  
  -nw                do not display warnings  
  @<file>            read additional options from file  
  -v                 display version of moc 
Usage: moc [options] <header-file>
  -o<file>           write output to file rather than stdout
  -I<dir>            add dir to the include path for header files
  -E                 preprocess only; do not generate meta object code
  -D<macro>[=<def>]  define macro, with optional definition
  -U<macro>          undefine macro
  -i                 do not generate an #include statement
  -p<path>           path prefix for included file
  -f[<file>]         force #include, optional file name
  -nw                do not display warnings
  @<file>            read additional options from file
  -v                 display version of moc

这样我就将 "-fpch.h" 放入mainwindow.h的custom build step设置的comman line参数中。但是原先的包含的mainwindow.h会被覆盖,这样我再加入-fmainwindow.h,问题解决。因此最终在moc后面加入的参数是 “-fpch.h -fmainwindow.h”。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aladdina/archive/2009/03/17/3999787.aspx

 

http://blog.csdn.net/aladdina/archive/2009/04/30/4141050.aspx

在Qt Creator中给Qt配置预编译头文件(Predefined Headers)

 

前面写过一篇blog是关于如何 在Visual Studio中通过moc给Qt配置预编译头文件(Predefined Headers)

其实如果你能保证每次都通过修改Qt Creator的工程文件(.pro),然后通过Qmake转成Visual Studio的工程文件(.vcproj),那其实上面blog中提到的那种繁琐的方法是不需要的。修改Qt的工程项目文件,只需要将下面的code加入pro文件中即可:

 # Use Precompiled headers (PCH)
 PRECOMPILED_HEADER  = stable.h

http://www.pin5i.com/showtopic-25976.html

Linux下编写Qt程序的详细步骤

前一段时间做过一个在Linux下编写的Qt程序,没来得及总结,现在总结一下Linux下开发的详细步骤。不过现在发现使用Eclipse或者 Qt Creator要比直接用VIM编程快捷多了,以后在学习Qt的过程中可能就不直接在Linux下编了,先在Winxp下编了再移植吧。

任务:在Redhat系统下创建和显示一个简单的窗口,使用标签显示字符串“Hello, Qt!”,在Redhat上调试通过后交叉编译下载至MagicARM2410上运行。

主要思想:标签是设计图形界面不可或缺的基本组件,利用标签我们可以显示各种信息。Qt为标签提供了一系列API函数,通过调用这些函数,可以很容易设计各种标签。调用Qt中标签的API函数,必须包含标签的头文件qlabel.h。如果需要显示的字符串信息很长,建议不要使用QLabel,改用其它部件如 MultiLineedit(多行编辑区)。

详细步骤

(1)进入/zylinux/x86-qtopia目录(Qt x86安装目录),运行set-env脚本,为本实验设置环境变量,然后创建文件夹hello。

  1: $ cd /zylinux/x86-qtopia

  2: 

  3: $ . set-env

  4: 

  5: $ mkdir hello

(2)进入hello目录,新建文件hello.cpp,并编写程序,然后用progen工具生成工程文件hello.pro。

  1: $ cd hello

  2: 

  3: $ vi hello.cpp

  4: 

  5: $ progen –t app.t –o hello.pro

(3)使用tmake工具,生成hello工程的Makefile文件。

$ tmake -o Makefile hello.pro

(4)修改Makefile文件,在LIBS变量中增加需要用到的库,然后输入make命令编译。

  1: LIBS    =      $(SUBLIBS) -L$(QTDIR)/lib -lqte -lm -lstdc++

              $ make

(5)启动虚拟控制台,运行hello程序(主机须启动帧缓冲,必须能够访问/dev/fb0)。

  1: $ cd /zylinux/x86-qtopia

  2:  qvfb&

  3: $ cd hello

  4: 

  5: $ ./hello –qws

        或者在终端,启动虚拟缓冲区和QPE,启动Qtopia的终端,输入./hello运行程序,亦可得到和图 6.1一样的结果。

$ cd /zylinux/x86-qtopia

$ . set-env

$ cd hello

$ qvfb&

$ ./hello

$ qpe

如果要将Hello程序发布到MagicARM2410上运行,还需进行以下工作:

(6)进入/zylinux/arm-qtopia目录(安装目录),并将hello工程复制到当前目录下。

$ cd /zylinux/arm-qtopia

$ cp –av /zylinux/x86-qtopia/hello .

(7)运行当前目录下的set-env文件,重新设置环境变量,进入hello目录,使用tmake工具,重新生成Makefile文件。

$ . set-env

$ cd hello

$ tmake -o Makefile hello.pro

(8)按照步骤(4)的方法修改包含库,编译,得到可执行文件hello,将hello文件添加到文件系统中,更新文件系统。

(9)插入USB鼠标和USB键盘,启动MagicARM2410。启动Qtopia的终端,运行hello程序。

注意事项:

      (1)如果在PC中运行hello程序,出现某些库找不到,该如何处理?

        提示:将所缺的库从/zylinux/x86-qtopia/qt/lib目录下复制到主机系统/usr/lib目录下即可。

        (2)在ARM上运行时如果也出现类似问题,又该如何解决?

        提示:将所缺的库从/zylinux/arm-qtopia/qt/lib目录下复制到目标系统/usr/lib目录下即可。

      (3)使用自定义插槽:

        Q_OBJECT

        ....

        private slots:

            void popupDialog();

      tmake可以自动处理moc,如果出现undefined vtable,则用moc生成moc_hello.cpp,编译成moc_hello.o,最后一起连接即可。

 

 

你可能感兴趣的:(redhat,File,header,qt,makefile,Warnings)