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 一 序列化组 ...
随机推荐
- onlevelwasloaded的调用时机
并不是任何场景加载完成后都会触发该事件,必须使用场景加载API才能触发onlevelwasloaded函数,场景加载API如 scenemanager.loadscene等,additive模式不触发 ...
- 网卡流量监控脚本 ( Shell )
#!/bin/bash # Traffic Monitor # author: Xiao Guaishou get_traffic_info(){ recv=`cat /proc/net/dev | ...
- 从零玩转JavaWeb系列7web服务器-----用户登录界面二维码的制作
1.用eclipse工具新建一个Dynamic Web Project工程如下: 2.在Java Resources的src目录下新建一个包,包名称为com.it666.code 3.在com.it6 ...
- JAVA集合中的迭代器的遍历
JAVA中的迭代器,迭代实质上就是遍历,在JAVA中使用iterator()方法进行迭代.需要注意的是,iterator()方法的返回值是Iterator对象.Iterator对象有三个方法,hasN ...
- 压力测试工具--Siege
Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力.可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行.s ...
- PHPStorm+XDEBUG 调试Laravel
首先输出phpinfo(); https://xdebug.org/wizard.php 打开然后查看适合你的调试扩展版本 ,目前支持到php7.2 整个页面ctrl+a 复制进去 然后下载 扩展文 ...
- Unity发布安卓Splash Image适应手机、平板
问题描述: Unity发布安卓应用时,遇到只能添加一张SplashImage而需要适配手机及平板不同分辨率处理 解决方法: http://blog.csdn.net/aiyan1111111/arti ...
- HowTo: Xen 4.1.3 Windows 8 HVM domU with Intel HD4000 VGA Passthrough on Debian Wheezy
http://linux-bsd-sharing.blogspot.com/2012/10/howto-xen-413-windows-8-hvm-domu-with.html Update 05/0 ...
- c# 类中使用ResolveUrl
类中使用ResolveUrl 1>获取当前page然后调用ResolveUrl System.Web.UI.Page page = HttpContext.Current.CurrentHand ...
- [Plan]计划
1. scala 2. kafka 1. lua 2. openResty 1. 日志收集 - python 2. 代码生成 3. 权限系统