Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 397, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

vs2017+Qt 5.12.0开发环境搭建

1、qt下载:http://download.qt.io/archive/qt/5.12/5.12.0/qt-opensource-windows-x86-5.12.0.exe
2、执行qt-opensource-windows-x86-5.12.0.exe,在Qt Account - Your unified login to erverything Qt页面选择Skip;
      Qt 5.12.0 设置Qt->Qt 5.12.0 勾选MSVC 2017 32-bit、MSVC 2017 64-bit、 UWP ARMv7(MSVC 2017)、UWP x64(MSVC 2017)、 UWP x86(MSVC 2017)即可。具体的模块说明如下:
 MinGW 7.3.0 64 bit 编译器模块。MinGW 是 Minimalist GNU for Windows 的缩写,MinGW是 Windows 平台上使用的 GNU 工具集导入库的集合。
用于 UWP 编译的模块。UWP 是 Windows 10 中 Universal Windows Platform 的简称,有不同编译器类型的 UWP。
 用于 windows 平台上的 MSVC 编译器模块,如 msvc2015 32-bit 和 msvc2015 64-bit 等。要安装 MSVC 编译器的模块,需要计算机上已经安装相应版本的 Visual Studio。
 用于 Android 平台的模块,如 Android x86 和 Android ARMv7。
Sources 模块是 Qt 的源程序。
Qt Charts 是二维图表模块,用于绘制柱状图、饼图、曲线图等常用二维图表。
Qt Data Visualization 是三维数据图表模块,用于数据的三维显示,如散点的三维空间分布、三维曲面等。
 Qt Purchasing、Qt WebEngine、Qt Network Auth(TP)等其他模块,括号里的 TP 表示技术预览(Technology Preview)。
Qt Scritp(Deprecated)是脚本模块,括号里的“Deprecated”表示这是已经过时的模块。
“Tools”节点下面是一些工具软件,一般不用勾选默认的就可以。内容如下:
 Qt Creator 4.8.0 是用于 Qt 程序开发的 IDE。
 MinGW 5.3.0 是 MinGW 编译工具链。
Strawberry Perl 是一个 Perl 语言工具。
3、安装vs2017的qt插件:Tools-->Extensions and Updates-->Online,搜索Qt,找到Qt Visual Studio Tools下载安装
4、配置Qt VS Tool的环境
    Qt VS Tools点击Qt Options,Add按钮,Path按钮找选择qt安装目录下的MSVC 编译器模块路径。
5、Qt的信号槽
qt信号槽是观察者模式的一种实现,特性如下:
A、一个信号就是一个能够被观察的事件,或者至少是事件已经发生的一种通知;
B、一个槽就是一个观察者,通常就是在被观察的对象发生改变的时候——也可以说是信号发出的时候——被调用的函数;
C、信号与槽的连接,形成一种观察者-被观察者的关系;
D、当事件或者状态发生改变的时候,信号就会被发出;同时,信号发出者有义务调用所有注册的对这个事件(信号)感兴趣的函数(槽)。
信号和槽是多对多的关系。一个信号可以连接多个槽,而一个槽也可以监听多个信号。
信号槽与语言无关,有多种方法可以实现信号槽,不同的实现机制会导致信号槽的差别很大。信号槽术语最初来自 Trolltech 公司的 Qt 库,由于其设计理念的先进性,立刻引起计算机科学界的注意,提出了多种不同的实现。目前,信号槽依然是 Qt 库的核心之一,其他许多库也提供了类似的实现,甚至出现了一些专门提供这一机制的工具库。
  信号槽是Qt对象以及其派生类对象之间的一种高效通信接口,是Qt的核心特性,也是Qt区别与其他工具包的重要地方。信号槽完全独立于标准的C/C++语言,因此要正确的处理好信号和槽,必须借助于一个成为MOC(Meta Object Compiler)的Qt工具,MOC工具是一个C++预处理程序,能为高层次的事件处理自动生成所需要的附加代码。

MFC中的消息机制没有采用C++中的虚函数机制,原因是消息太多,虚函数开销太大。在Qt中也没有采用C++中的虚函数机制,而是采用了信号槽机制,原因与此相同。更深层次的原因上,多态的底层实现机制只有两种,一种是按照名称查表,一种是按照位置查表。两种方式各有利弊,而C++的虚函数机制无条件的采用了后者,导致的问题就是在子类很少重载基类实现的时候开销太大,再加上界面编程中子类众多的情况,基本上C++的虚函数机制效率太低,于是各家库的编写者就只好自谋生路,当然,这其实是C++语言本身的缺陷。

qt的事件函数要自己手动添加,命名格式些函数是有命名规则的,"on_"后面是控件的设计名字(objectName,步骤三中,红色字体部分),然后后面是“_clicked()”,你在设计的时候最好遵循这种命名格式,这样你就可以省掉4.2的步骤(2.连接信号与槽.),也就是说,你如果遵循这个命名格式的话你就不用写connect()函数了,因为这种定义让系统能够自动识别信号与槽的连接。
如果没有按照命名规则来命名槽函数,那么就要进行信号与槽的连接,所谓信号与槽的连接就是,一个信号send出来,要有一个槽接收这个信号,然后执行相应任务,这个过程需要连接的,如果不设计这个连接,即使Button send出一个click信号,也没有什么东西去执行click后的任务。

在qt工程的ui文件双击打开,添加控件和信号槽。

posted on 2018-12-29 20:19 Benjamin 阅读(10868) 评论(0)  编辑 收藏 引用 所属分类: VC


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理