Qt学习(二):项目学习
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学习(二):项目学习的更多相关文章
- Linq学习(二)-本次学习用到的资料
本次学习用到的数据库初始化脚本如下 use KMS create table Blog_User ( UserId ,1), NickName ), CreateTime datetime ) cre ...
- Qt Lighthouse学习(二),就是QPA(Qt Platform Abstraction) 项目的名字
上一次关注Qt Lighthouse是在6月初,可是现在都8月底了.时间真快... Lighthouse 是 QPA(Qt Platform Abstraction) 项目的名字,它使得将Qt移植到新 ...
- Qt Installer Framework的学习(二)
Qt Installer Framework的学习(二) Qt Installer Framework的一些操作能够使用最常见的Qt项目来表示,也就是说,书写pro文件,使用qmake执行之,除了能够 ...
- SpringCloud学习(二):微服务入门实战项目搭建
一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...
- day 82 Vue学习二之vue结合项目简单使用、this指向问题
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
- Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置
0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...
- day 81 Vue学习二之vue结合项目简单使用、this指向问题
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
- Qt Creator 源码学习笔记03,大型项目如何管理工程
阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...
随机推荐
- SignalR web实时同步 消息推送 广播
源码:https://github.com/SignalR/SignalR demo:http://download.csdn.net/download/qq_21533697/9702791#com ...
- visjs使用小记-3.简单网络拓扑图的折叠与展开
项目需要对节点无限层级查看,大概捣鼓了下,以下demo代码可根据节点的层级顺序,通过节点双击简单实现节点的折叠与展开 <!doctype html> <html> <he ...
- Spring DI的配置使用
1.1.1 依赖和依赖注入Spring IOC容器的依赖有两层含义:Bean依赖容器和容器注入Bean的依赖资源:a.Bean依赖容器:也就是说Bean要依赖于容器,这里的依赖是指容器负责创建Bean ...
- MySQL数据库篇之库的增删改查
主要内容: 一.系统数据库介绍 二.创建数据库 三.数据库增删改查 四.MySQL添加注释 1️⃣ 系统数据库介绍 1.初识sql语句 有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱 ...
- Hadoop HA 机制学习
一.Hadoop 系统架构 1.1 Hadoop1.x和Hadoop2.x 架构 在介绍HA之前,我们先来看下Hadoop的系统架构,这对于理解HA是至关重要的.Hadoop 1.x之前,其官方架构如 ...
- 117 FP页面无法查看 此错误是JDK8.0.0.0版本的一个BUG,会导致工单重复回写,
用户表示117 FP页面无法查看,提示如下错误: 跟进: 1.进入FP服务器可看到以下错误 这个错误的框就表示FP的一个进程报错,自动断掉了,需要重新跑一次EXIT,INIT,PLAN,EXPORT, ...
- java基础强化——深入理解java注解(附简单ORM功能实现)
目录 1.什么是注解 2. 注解的结构以及如何在运行时读取注解 2.1 注解的组成 2.2 注解的类层级结构 2.3 如何在运行时获得注解信息 3.几种元注解介绍 3.1 @Retention 3.2 ...
- poj2796 Feel good
题目给出N个数,找出一段区间使得区间最小值乘区间和的值最大 其中N<=100000 分析: 单调队列(单调栈) 求出每个值作为最小值时最长的影响区间,然后枚举判断 这找出最长影响区间应该算是单调 ...
- centos6 安装 docker
一.升级内核(带aufs模块) 1.yum安装带aufs模块的3.10内核(或到这里下载kernel手动安装:http://down.51cto.com/data/1903250) cd /etc/y ...
- Nginx源码完全注释(5)core/ngx_cpuinfo.c
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #include <ngx_config.h> #include ...