您的位置:首页 >  新闻中心 > 行业动态
  行业动态
 

【干货】如何搭建QT开发环境

来源:原创    时间:2017-04-18    浏览:0 次

Qt 是一个跨平台的 C++应用手续研发框架。它提提供研发者树立图形用户界 面所需的功能,广泛用于研发 GUI 手续,也可用于研发非 GUI 手续。Qt 是绝对 面向对象的,很容易扩展,况且准许真正地组件编程。Qt 运用标准的 C++和特别的代码生成扩展(称为元对象编译器 Meta Object Compiler, moc)以及一点宏。 
基本上,Qt 同 X11 上的 GTK、Motif、Openwin 和 Windows 上的 MFC,OWL, VCL,ATL 是同类型的物品,不过 Qt 支持更多的平台(涵盖 Microsoft Windows、GNU/Linux、Mac OS X、Android、iOS、WinCE、UNIX 亲族等),面向对象且板块化程度更高(Qt 供给了一种称为 signals/slots 的安全类型来代替 callback,这 要得各个元件之间的协同办公变得非常简单),浩博的API(Qt 涵盖多达 250个 以上的C++ 类还供给基于模型板类的collections,serialization,file,I/Odevice,directory,management, date/time 类。甚至于还涵盖正则表现式的处置功能),支 持 2D/3D 图形渲染,支持 OpenGL、数量多的研发文档、XML 支持等。运用 Qt 研发的软件,相同的代码可以在不论什么支持的平台上编译运行,而不必改正源代 码。它会半自动依据平台的不一样,表达平台特有的图形界面风格。 
通过积年进展,Qt 不惟领有了完善的 C++图形库,并且近年来的版本渐渐集成了数值库、OpenGL 库、多电视台库、网路、脚本代码库、XML 库、WebKit 库等等, 其中心库也参加了进程项间通信、多线程等板块,莫大地浩博了 Qt 研发大规模复 杂跨平台应用手续的有经验,真正意义上成功实现了其开发宗旨“Code Less; Create More; Deploy Anywhere.” 
 二 
QT 在 windows 下的背景建造
在 windows 背景下,可以运用 vs+qt 的研发背景施行项目研发,背景建造时有点细节要注意:
1
下载
下载时要注意下载和 vs 版本相般配的 qt 版本,以及 Add-in 工具。找到对应 的版本施行下载,里边粉和水发酵制成的食品含多种不一样的版本,MSVC2010、MSVC2012 作别是指支 持 VS2010 与 VS2012 的 Qt 版本,而 opengl 与非 opengl 的差别是是否支持 opengl, android、ios 作别是指支持 android、ios 平台的 Qt 版本。这处我挑选的版本(已示明),如下所述:
qt-windows-opensource-5.2.0-msvc2010_opengl-x86-offline.exe(opengl版本)
Visual Studio Add-in 1.2.2 for Qt5
如图: 
2
安装
qt-windows-opensource 与 Visual Studio Add-in 的安装顺着次序没关系要求,安装途径不要里面含有汉字、空格、特别字符(~<>?*!@#$百分之百^&:,;)。 安装完成 Visual Studio Add-in 在这以后,VS 便会显露出来相应的 Qt 选项! 
3
配备布置研发背景
挑选:Qt5->Qt Options->Add,配备布置 VS 的研发背景。
 
这处依据自个儿的 Qt 安装途径施行挑选,Path 为: D:SoftwareQtQt5.2.0.2.0msvc2010_opengl。 到这处,研发背景就配备布置完成了,可以导入还是新建项目了。 
导入Qt的pro项目。
挑选:Qt5->Open Qt Project File(.pro)...
新建Qt项目
挑选:文件->新建->项目->Qt5 Projects->Qt Application,输入工程名,下一步...施行新建。
新建完成在这以后,就可以运行了! 
QT 的一点独特的地方以及简单运用
1
图形用户界面
Qt 的图形用户界面的基础是 QWidget。Qt 中全部类型的 GUI 组件如按键、标签、工具栏等都分化自 QWidget,而 QWidget 本身则为 QObject 的子类。Widget 负责收缴鼠标,键盘和来自窗户系统的其它事情,并描画了自身显露在荧幕上。 每一个 GUI 组件都是一个 widget,widget 还可以作为器皿,在其内部面含有其它 Widget。
下边以登陆窗户为例: 
左侧的列表是 QT 的控件列表,列表中的全部控件都可以放在 QWidget 上。 QWidget 显露有经验里面含有了透明化等功能。 设置透明化,有几种形式,我们这处用到的是设置式样表的形式,下边的例子是设置 QLineEdit 控件透明没有边际框。
如图: 
Qt 供给一种托管机制,当 Widget 于开创时指定父对象,就可把自个儿的性命 周期交付领导对象管理,当领导对象被开释时,自个儿也被开释。保证对象不再使 用时都会被删去。 
这个登陆窗户中的全部控件的父 widget 都是这个窗户,所以在窗户被毁掉时, 全部控件也同时被毁掉,不必自个儿去扼制。所以析构函数的成功实现函数中可以不施行处置,代码如下所述:
LoginDialog::~LoginDialog() {
2
信号与槽机制(Signals and Slots)
Qt 利用信号与槽(signals/slots)机制代替传统的 callback 来施行对象之间的沟通。当操作事情发生的时刻,对象会发射一个信号(signal);而槽(slot)则 是一个函数接纳特别指定信号况且运行槽本身设置的动作。信号与槽之间,则经过 QObject 的静态办法 connect 来链接。 
例如:
connect(ui.pushButton_close, SIGNAL(clicked()), this, SLOT(closeSlot()));
当关闭按键被点击时,会被触动引发 QPushButton 的 clicked()信号,信号被发射在这以后, 会连署到收缴者定义的槽函数中,这处是 closeSlot();
信号在不论什么运行点上皆可发射,甚至于可以在槽里再发射另一个信号,信号与槽的链接不框定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到 同一个槽,甚至于信号也可连署到信号。 
信号与槽机制也保证了低耦合性,送出信号的类并不晓得是哪一个槽会接纳, 也就是说一个信号可以调配使用全部可用的槽。此机制会保证当在”连署”信号和槽时, 槽会接纳信号的参变量况且准确运行。 
这处,我想谈的是 Qt 总算创造了 signal/slot,这个思想也被其它一点框架语 言吸收了。 
谈 signal/slot 之前先来谈谈 C++的缺欠,这处只谈一点儿,C++的预设目的是面 向对象语言,它不止供给了对象的定义和构建的形式,也定义了对象间的关系, 譬如 秉承 分化 聚合,不过它没有供给对象间通信和共享数值的形式,这个缺 点在普通手续的研发上不算个大问题,我们可以自个儿简单成功实现,不过对于 GUI 研发,这个欠缺就被放大了众多倍。GUI 上的对象真的非常多,窗户是对象,布局 是对象,定时器是对象,并且对象间有纵横交错的关系,通信和数值交换十分次数多,譬如按键按下要通告父窗户或器皿对象,骨碌条变动了要通告列表对象。这 种数目极大的对象以及复杂的通信关系,可不是自个儿搞个简单的成功实现就能解决的。 
说到通信和共享,实际上它们是一回事,共享很很长时间候就是为了通信,而 C++ 里要通信就定然要共享。 
譬如,一个类实际的例子领有另一个的指针,就可以过访对方的数值,调配使用对方的 办法了,这实际就是共享了一个指针,这个类指针也是另一个对象的 this。过访 数值和调配使用办法实际上都是通信,把对方的数值拿过来,把自个儿的数值送以往,交 换数值就是通信。 
在 C++里,因为没有 GC,管理数量多原生指针曲直常危险的,对象的性命周期 不可以控,野指针的显露出来几率会颀长,大型 C++ 的 GUI 项目参加研发的人次很多, 很保不住证都不犯错。 
那末发消息儿好不好呢?譬如 MFC 那样子,可以,不过实质上仍然共享了窗户句 柄,否则消息儿发给谁呢?并且还带来额外的问题,就是类型安全,消息儿的参变量是 没有办法类型安全的。 
Qt 作为大型 GUI 项目标 Framework,它务必解决这个问题,否则这个手续是 写半大的,写大了便会问题接连不断。 
来看一段代码,看看 Qt 的解决方案: Window::Window()
{
QPushButton *b = new QPushButton(this);
connect(b, SIGNAL(clicked()), SLOT(on_button_clicked())); }
Window::on_button_clicked() {
QPushButton *b = qobject_cast<QPushButton*>(sender());
b->setText("clicked!"); }
这段代码,经过 Qt 的 signal slot 机制,把 QPushButton 的点击事情连署到达 Window 的 on_button_clicked 响应函数上。 
3
布局管理
布局管理类用于描写一个应用手续的用户界面中的Widget是怎么样安放。当视窗缩放时,布局管理器会半自动调试 widget 的体积、位置或是字号,保证它们相 对的排列和用户界面群体还是持有可用性。 
Qt 内置的布局管理类型有:QHBoxLayout、QVBoxLayout,QGridLayout 和 QFormLayout。这些个类秉承自 QLayout,但 QLayout 非秉承自 QWidget 而是直接 源于 QObject。它们负责 widget 的几何管理。想要开创更复杂的版面配备布置,可以 秉承 QLayout 来自定义版面配备布置管理员。 
上图中被红框圈起来的,是页面中的布局,布局可以用手写,我们这处只展览预设 师中处置的布局。布局分为四种,我们这处用到达简单的两种,横向布局 (QHBoxLayout)向布局(QVBoxLayout)。
如上所述图所示。 
到这处截止,只绍介了 qt 的一点基本的初步学会知识,大家经过 qt 的界面文件 中的布局和信号处置,就可以完成一个简单的 Qt 小手续啦!