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. Redis实战——phpredis扩展安装

    准备安装软件(download) 1> [redis]       http://redis.googlecode.com/files/redis-2.4.3.tar.gz 2> [php ...

  2. Python的输入输出

    一:Python2.x版本下的输入输出 Python2.x 下的输入 1)raw_input 格式:result = raw_input("提示信息")功能:1)会等待用户输入内容 ...

  3. ui-router 留存

    学习 ui-router - 路由控制 022014年01月 参考原文:https://github.com/angular-ui/ui-router/wiki/URL-Routing 在你的应用中大 ...

  4. Windows Nginx 基本操作

    Nginx 下载 下载路径:Nginx下载 下载后解压如下图 常用命令 在nginx目录下打开命令行工具(可能需要管理员权限). start nginx : 启动nginxnginx -t 测试ngi ...

  5. linux/ubuntu 端口开放

    在ubuntu下面开放端口好像主要有两种方法,一种是ubuntu自带的防火墙,一种是iptables,这里我们主要使用iptables.本文的系统版本为ubuntu14.04和ubuntu16.04 ...

  6. avalon最佳实践

    最近从angular的QQ群与新浪微博拉了许多人来用我的avalon,成为第一批登上方舟,脱离DOM苦海的人.短短三个月内,5群的朋友也搞出几个切实实行的案例了.为应对粉丝们高益高涨的热情,遂放出此文 ...

  7. validator 参数校验的常用注解

    @AssertFalse Boolean,boolean 验证注解的元素值是false @AssertTrue Boolean,boolean 验证注解的元素值是true @NotNull 任意类型 ...

  8. 本地yum源构建以及Docker离线安装

    Docker离线安装以及本地yum源构建 在docker的使用过程中有时候会遇到一些私有化部署的问题,就是在一些无法上网的机器上面安装使用dokcer,这就引出了docker的离线安装的问题,dock ...

  9. Springboot-读取核心配置文件及自定义配置文件

    读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...

  10. [Training Video - 4] [Groovy] Function in detail

    Employee.log=log Employee e1 = new Employee() Employee e2 = new Employee() e1.name = "A" e ...