1. 概述

  • Qt做UI设计后,通常会生成Form Files文件夹下的ui文件、Generated File文件夹下的ui_xxx等头文件和源文件、Header Files文件夹下的头文件、Source Files文件夹下的源文件

2.

  • 打开一个新的Qt Dialog可以用exec方法,比如按钮点击触发或菜单按钮点击触发

    • 模态?关闭后回到代码继续进行
  • moc
    • Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉。完成这一操作的就是 moc。
    • moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,我们还可以看出一点,moc 的执行是在预处理器之前。因为预处理器执行之后,Q_OBJECT 宏就不存在了。
    • 在命令行下输入moc yourfilename.h -o moc_youfilename.cpp生成不带Q_OBJENT的源文件。

3. 开发流程

  • 使用QT5->Launch Designer打开设计工具,设计界面,生成ui文件
  • 根据ui文件生成ui_xxx.h头文件
    • 手动
    • QCreator自动?
    • vs+Qt5自动
      • vs+Qt5+addin创建的工程自动?
      • 非vs+Qt5+addin创建的工程:
        • 在.ui文件上右击打开属性窗口,选择常规-项类型,选择自定义生成工具,Apply后会自动重新打开(或者保存后自己再打开),就出现了自定义生成工具选项
        • Command Line配置成"$(QTDIR)\bin\uic.exe" -o "$(ProjectDir)\GeneratedFiles\ui_%(Filename).h" "%(FullPath)",文件全路径名中除了%(Filename)参数都可以自己定
        • Outputs配置成$(ProjectDir)\GeneratedFiles\ui_%(Filename).h;%(Outputs),文件全路径名中除了%(Filename)参数都可以自己定
  • 根据ui_xxx.h头文件生成moc_xxx.cpp源文件
    • 手动

      • 切换到Qt的bin目录(如D:\Qt\Qt5.5.1\5.5\msvc2012\bin),然后uic TestQtDialog.ui -o TestQtDialog.h
    • QCreator自动?
    • vs+Qt5自动
      • vs+Qt5+addin创建的工程自动?
      • 非vs+Qt5+addin创建的工程:
        • 在ui_xxx.h文件上右击打开属性窗口,选择常规-项类型,选择自定义生成工具,Apply后会自动重新打开(或者保存后自己再打开),就出现了自定义生成工具选项
        • Command Line配置成"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles$(ConfigurationName)\moc_%(Filename).cpp",文件全路径名中除了$(ConfigurationName)和%(Filename)参数都可以自己定
        • Outputs配置成.\GeneratedFiles$(ConfigurationName)\moc_%(Filename).cpp,文件全路径名中除了$(ConfigurationName)和%(Filename)参数都可以自己定
  • 工程包含ui_xxx.h和moc_xxx.cpp所在目录
    * Additional Dependencies设置成$(QTDIR)\bin\moc.exe;%(FullPath)

    • 通常还是会把ui文件、ui_xxx.h、moc_xxx.cpp文件include放到工程中,并且放在特定的物理文件夹和filter里

5. 其他

  • 链接时报错"No relevant classes found. No output generated."

    • 通常是因为该头文件不需要生成moc文件,也就是不需要moc'ing
    • 选中该头文件,Properties中把Item Type从Qt Moc Tool改成C/C++ Header就好了
    • 只有包含Q_OBJECT的.h头文件才需要被moc'ing
    • 参考
  • 链接时报错"unresolved external symbol "public: static struct QMetaObject const QWinWidget::staticMetaObject" (?staticMetaObject@QWinWidget@@2UQMetaObject@@B)"等

Qt学习(二):项目学习的更多相关文章

  1. Linq学习(二)-本次学习用到的资料

    本次学习用到的数据库初始化脚本如下 use KMS create table Blog_User ( UserId ,1), NickName ), CreateTime datetime ) cre ...

  2. Qt Lighthouse学习(二),就是QPA(Qt Platform Abstraction) 项目的名字

    上一次关注Qt Lighthouse是在6月初,可是现在都8月底了.时间真快... Lighthouse 是 QPA(Qt Platform Abstraction) 项目的名字,它使得将Qt移植到新 ...

  3. Qt Installer Framework的学习(二)

    Qt Installer Framework的学习(二) Qt Installer Framework的一些操作能够使用最常见的Qt项目来表示,也就是说,书写pro文件,使用qmake执行之,除了能够 ...

  4. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  5. day 82 Vue学习二之vue结合项目简单使用、this指向问题

    Vue学习二之vue结合项目简单使用.this指向问题   本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...

  6. Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置

    0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...

  7. day 81 Vue学习二之vue结合项目简单使用、this指向问题

    Vue学习二之vue结合项目简单使用.this指向问题   本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...

  8. Qt Creator 源码学习笔记03,大型项目如何管理工程

    阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...

  9. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  10. DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer

      DjangoRestFramework学习二之序列化组件.视图组件   本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...

随机推荐

  1. Django X 和 druid

    依托于实际项目和生产环境互联网产品的总结积累,继承和扩展Xadmin,DjangoX 努力做 Django 框架的优秀实践项目 https://github.com/JoneXiong/DjangoX ...

  2. flume 转

    http://blog.csdn.net/xiao_jun_0820/article/details/38111305

  3. Standard shader 和 Standard (Specular setup) Shader

    http://blog.csdn.net/jk823394954/article/details/48594341

  4. Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题

    在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识.   这个标识在Java读取文件的时候,不会被去掉,而且Stri ...

  5. oracle的约束隐式创建索引和先索引后约束的区别

    oracle的约束隐式创建索引和先索引后约束的区别 两种情况:1.对于创建约束时隐式创建的索引,在做删除操作的时候: 9i~11g都会连带删除该索引 2.对于先创建索引,再创建约束(使用到此索引)这种 ...

  6. 监控windows

    一.zabbix server和zabbix agent(windows)的地址说明 zabbix server的ip为:192.168.1.106 zabbix agent的ip为:192.168. ...

  7. CentOS 6.5 下安装 Sun JDK 1.7

    下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 得到 jdk-7u51-l ...

  8. LoadRunner11学习记录一 -- 安装

    一.首先是安装,相关的下载文件如下: 安装文件:http://pan.baidu.com/s/1ntH0Rd3 破解补丁:http://pan.baidu.com/s/1hq2HRsK 汉化包:htt ...

  9. [模板]单源最短路径(Dijkstra)

    如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 主要还是再打一遍最短路,这种算法我用的不多... #include<bits/stdc++.h> using namesp ...

  10. C#变量初始化

    在C#中声明变量使用下述语法: datatype identifier;, 例如: int i; 该语句声明int变量i.编译器不允许在表达式中使用这个变量,除非用一个值初始化了改变量.如果你不需要使 ...