目录
1、搭建开发环境(VS2010和QT4.8.2)
2、创建一个QT窗口
3、在QT窗口中添加子窗口
4、QT界面布局
5、QT信号(SIGNAL)和槽(SLOT)
6、最后
C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实战专栏(专栏文章已更新460多篇,持续更新中...)https://blog.csdn.net/chenlycly/article/details/140824370C++ 软件开发从入门到精通(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_2276111.html QT是跨平台的界面库,它集成了很多优秀的界面设计思想,它作为程序UI界面编程的框架,是个很好的选择。今天就来讲讲使用C++和QT开发应用程序入门方面的内容,并分享一个简单的开发实例,以供借鉴或参考。
1、搭建开发环境(VS2010和QT4.8.2)
先下载qt-win-opensource-4.8.2-vs2010.exe并安装(本文安装在C盘根目录):
打开vs2010,选择 控制台工程(win32 console Application) 选中空的工程(empty project):
在工程中添加源文件:
将QT头文件包含路径(C:\Qt\4.8.2\include;C:\Qt\4.8.2\include\QtCore;C:\Qt\4.8.2\include\QtGui),lib库文件包含路径(C:\Qt\4.8.2\lib),添加到VS工程中,如下所示:
2、创建一个QT窗口
每个qt程序都必须有一个Qapplication实例 。当然,我们得链接库文件:
1)Release下:
#pragma comment(lib, “qtcore4.lib”)
#pragma comment(lib, “qtgui4.lib”)
2)Debug下:
#pragma comment(lib, “qtcored4.lib”)
#pragma comment(lib, “qtguid4.lib”)
这时我们编译过,但是运行会提示缺少qtgui4.dll,很简单,qt的安装目录下,bin文件夹下有我们需要的所有dll:
1)可以单独拷贝需要的dll到exe运行目录(主要采用该方式)
2)可以单独拷贝需要的dll到system32目录(不建议实用该方式,可能会影响到到其他程序)
3)当然我们可以添加环境变量PATH = C:\Qt\4.8.2\bin,然后工程executable directories添加C:\Qt\4.8.2\bin
此时,我需要qtcore.dll和qtgui.dll。
运行程序,虽然任何东西都没有出现,但我们的第一个qt程序已经构建成功,QApplication实例构建成功,它就是我们的应用程序实例,我们可以通过继承Qapplication构建自己的APP实例。
接下来是构建QT窗口了,QMainWindow从Qwidget(相当于MFC的CWnd)继承,要显示它,只需调用show()接口即可,如下:
因为我们是控制台工程,运行时会有dos窗口弹出,debug下可以方便的打印,比如cout和printf输出等,
如果release下不希望弹出dos窗口,可以修改链接器链接属性,把子系统从Console设置成Windows:
同时链接入口点函数设置成mainCRTStartup:
在这里,给大家重点推荐一下我的几个热门畅销专栏,欢迎订阅:(博客主页还有其他专栏,可以去查看)
专栏1:(该精品技术专栏的订阅量已达到550多个,专栏中包含大量项目实战分析案例,有很强的实战参考价值,广受好评!专栏文章持续更新中,预计更新到200篇以上!欢迎订阅!)
C++软件调试与异常排查从入门到精通系列文章汇总https://blog.csdn.net/chenlycly/article/details/125529931
本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的项目问题实战分析实例(很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!
考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力!所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!
专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!
专栏2:(本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,订阅量已达200多个,专栏文章已经更新到460多篇,持续更新中...)
C/C++实战进阶(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_11931267.html
以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点(模版泛型编程、STL容器及算法函数的使用等)、数据结构与算法、C++11及以上新特性(不仅看开源代码会用到,日常编码中也会用到部分新特性,面试时也会涉及到)、常用C++开源库的介绍与使用、代码分享(调用系统API、使用开源库)、常用编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(排查软件异常的手段与方法、分析C++软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等)、设计模式、网络基础知识与网络问题分析进阶内容等。
专栏3:
C++常用软件分析工具从入门到精通案例集锦汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795
常用的C++软件辅助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本专栏详细介绍如何使用这些工具去巧妙地分析和解决日常工作中遇到的问题,很有实战参考价值!
专栏4:
VC++常用功能开发汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/124272585
将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。
专栏5:
C++ 软件开发从入门到精通(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.html
根据多年C++软件开发实践,详细地总结了C/C++软件开发相关技术实现细节,分享了大量的实战案例,很有实战参考价值。
3、在QT窗口中添加子窗口
QT的所有控件类都是从QWidget继承,所以每个控件都有个构造函数,设置父窗口,传入QWidget*,我们首先添加一个QLable(相当于MFC的CStatic)显示“hello world,I am QT。"。把该控件的父窗口设置为CMainWindow(我们从QMainWindow继承,方便我们管理各个子窗口)。
添加新的类CMainWindow:
为了方便管理QLabel(显示hello world iam QT)子窗口,我们继承QMainWindow,并组合QLabel子窗口,设置其父窗口为this:
这样我们便可以在CMainWindow构造函数中创建子窗口了:
这时运行程序,QLabel并没有把我们的字显示完全,而且它默认的位置也不是我们想要的,我们想要它显示在窗口正中央。这样引入我们下个话题,qt界面的布局。
注意:我们在构造函数new了一个QLabel对象,但是并没有在析构函数delete掉它,因为qt框架自身有内存回收的机制,因为Qlabel是CMainWindow的子窗口,它析构的时候会自动释放所有子窗口,子布局器,不需要我们自己显示的delete(至于它内部的回收机制,希望以后有机会可以介绍,这里不多做介绍,篇幅已然太长了)
当然我们可以添加更多的其他子控件,比如QLineEdit、QEdit、QPushButton、QTableWidget等等,下边介绍界面布局,当然同时我们会用到其他更多的控件。
4、QT界面布局
MFC有RC资源编辑器,可以方便的编辑对话框,qt也有qtdesigner可以方便的编辑各种窗口,但是qt更灵活,提供布局管理器,可以方便的为我们的界面布局,不需要运行时计算主窗口大小,然后计算各个子控件位置,常用的界面布局类:QHBoxLayout(水平布局)、QVBoxLayout(垂直布局)、QGridLayout(网格布局) 。
上一段的Hello world Iam QT并没有显示完整,我希望它显示在CMainWindow正中央,可以用QHBoxLayout,也可以用QVBoxLayout(因为我们要往布局器中加入的只有一个QLabel窗口,当然水平布局,垂直布局都一样)。
添加两个成员函数,CreateSubCtrls,CreateSubLayout(创建子窗口,创建子布局):
首先创建一个水平布局器,把QLabel加进去,然后设置中心窗口的布局。
注意:我们创建m_pLabelHello并没有指定父窗口,它的父窗口是NULL,但是加入layout中,layout又被pCentralWidget setlayout为自己的子布局器,pCentralWidget又是CMainWindow的子窗口,这样父子窗口的层级就出来了。不需要指定父窗口了。
我们希望有更复杂的布局:
创建它们:
因为我们用到的中文,需要设置中文字符编码器,要不会有乱码:
现在创建布局:
显示结果:
现在我们分析下这个布局:
1)创建网格布局,并加入四个控件,行列规定好:
2)创建水平布局,加入两个按钮:
3)创建垂直布局,加入label,加入网格布局,加入水平布局:
从而得到:
5、QT信号(SIGNAL)和槽(SLOT)
QT提供信号和槽的机制,将响应的信号和槽关联起来,(connect函数,在Qobject中定义,QObject是所有QT类的基类)
connect函数有四个参数:
第一个参数是信号的发送者,
第二个参数是 发送什么信号
第三个参数是 信号的接受者
第四个参数是 接受者的槽,就是响应函数
我们连接服务器地址的 LineEdit的textChanged信号(用户编辑内容,便触发),到客户端的LineEdit的setText槽(设置文本),这样如果编辑第一个LineEdit,第二个LineEdit便跟着变化。
添加Init成员函数:
关联信号和槽:(注意,信号和槽函数的参数不能有变量声明)如:
运行结果:
我们可以自定义槽函数:
用关键字 slots在头文件中定义,可以有public private protected修饰。
注意:一定要加上Q_OBJECT宏。
正如前面介绍的,qt可以任意链接信号和槽。现在我们希望第一个LineEdit内容一旦改变,便发送信号给我们自定义的TextChengedSlot槽。我们自己在槽的响应中改变第二个LineEdit文本,这样我们应该修改信号的接受者,和接受者的槽函数:
现在我们需要用到qt的一个工具:moc工具。它在qt安装目录下的bin目录里
1)运行->cmd->进入qt的安装目录bin目录下:
cd C:\Qt\4.8.2\bin
2)用moc工具为我们生成信号槽链接机制的moc文件:Moc E:\vs2010_project\qttest\qttest\mainwindow.h –o E:\vs2010_project\qttest\qttest\moc_mainwindow.cpp
这样moc工具会在我们指定的目录下生成moc_mainwindow.cpp
把这个cpp加入到工程,编译,运行,运行结果:
6、最后
QT的功能很多,支持序列化串行化,文档视图框架,还有信号槽内部机制,多语言,集成了其他优秀的第三方库,类型注册机制等等。
此外,QT自带很多很方便的工具,QT Assistant(文档查询),QT Designer(界面设计),等,QT Creater(集成开发环境)集成了一系列工具,方便开发,希望以后有机会更进一步探讨,本文仅是QT入门,希望能给大家提供一定的借鉴或参考。