60分钟让你高定,Qt全部基础知识架构 | 您所在的位置:网站首页 › qt按钮文字左对齐 › 60分钟让你高定,Qt全部基础知识架构 |
一、Qt基础知识 Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。 2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。 2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。 Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。 * 1991年,Haavard Nord和Eirik Chambe-Eng开始开发将会支持X11和Windows的Qt * 1994年,Qt Company成立 * 1996年,KDE项目由MatthiasEttrich创建(Matthias现为诺基亚Qt发展框架工作) * 1998年4月5日,Trolltech的程序员在 5 天之内将 Netscape5.0 从Motif移植到 Qt 上 * 1998年4月8日,KDE Free Qt 基金会成立 * 1998年7月9日,Qt 1.40 发布 * 1998年7月12日,KDE 1.0 发布 * 1999年3月4日,QPL1.0 发布 * 1999年3月12日,Qt 1.44 发布 * 1999年6月25日,Qt 2.0 发布 * 1999年9月13日,KDE 1.1.2 发布 * 2000年3月20日,嵌入式Qt 发布 * 2000年9月6日,Qt 2.2 发布 * 2000年10月5日,Qt 2.2.1 发布 * 2000年10月30日,Qt/Embedded 开始使用GPL宣言 * 2000年9月4日,Qt free edition 开始使用 GPL * 2008年,Nokia从Trolltech公司收购Qt,并增加LGPL的授权模式 * 2011年,Digia从Nokia收购了Qt的商业版权,从此Nokia负责Qt on Mobile,,Qt Commercial由Digia负责 * 根据最新消息,NOKIA已经停止Meltemi系统开发,Qt部门被解散 * 2012年8月9日,作为非核心资产剥离计划的一部分,诺基亚宣布将Qt软件业务出售给芬兰IT服务公司Digia。 * 2013年7月3日,Digia公司Qt开发团队在其官方博客上宣布Qt 5.1正式版发布。 * 2013年12月11日,Digia公司Qt开发团队宣布Qt 5.2正式版发布。 * 2014年4月,Digia公司Qt开发团队宣布Qt Creator 3.1.0正式版发布。 * 2014年5月20日,Digia公司Qt开发团队宣布Qt 5.3正式版发布。 * 2019年,Qt团队宣布最新版5.13版本发布。 三、Qt 和 KDE之前提到 Qt 原本是商业授权软件,是怎么开源的呢?这就涉及 Qt 和 KDE 的纠葛了。 KDE 是 Linux 操作系统的桌面环境,与 GNOME 桌面是类似的,作为开源桌面它们竞争的情况更为多见。 KDE 是采用 GPL 许可证发布的开源软件,而最初 Qt 是商业授权的,存在商业侵权风险,GNOME 则是基于开源 GTK 库的,没有什么商业风险,这一度是 GNOME 优越于 KDE 的特性。 由于 Qt 的商业授权,KDE 社区一度混乱纠结,与此同时 GNOME 则如火如荼发展起来了。 KDE 毕竟算是亲儿子,被另一波人欺负,奇趣科技公司当然看不下去了,最后是奇趣科技公司为了赢得开发者的支持,为 Qt 增加了 GPL 的开源授权, 对于开源社区而言,遵循 GPL 使用 Qt 就不需要付费,这为 KDE 解决了燃眉之急。 之后 KDE 桌面和 GNOME 都发展壮大起来,都做得越来越好了。 四、GPL 和 LGPL除了商业授权,目前 Qt 的开源授权有两种,一种是 GPL 授权,另一种是 LGPL 授权(诺基亚收购后新增)。 对这两种开源授权,简单来说,使用 GPL 版本的软件一定还是 GPL 的开源软件,无论是使用了 Qt 的程序代码还是修改了 Qt 库代码,都必须按照 GPL 来发布,这是 GPL 的传染性。 GPL 是什么都要开源,这对商业软件应用是不利的,所以诺基亚增加了 LGPL 授权 (第一个 L 可以叫 Lesser 宽松版或 Library 开发库版)。使用 LGPL 授权就可以利用 Qt 官方动态链接库,而不必开放商业代码。只要不修改和定制 Qt 库,仅使用 Qt 官方发布的动态链接库就可以不开源,这是商业友好的授权模式。 其实只要不是做商业,就不太需要关注用什么授权,以 GPL 授权发布程序代码就可以了。 1、如何选择开源协议世界上的开源协议有上百种,很少有人能彻底搞清它们之间的区别,即使在最流行的六种开源协议——GPL、BSD、MIT、Mozilla、Apache 和 LGPL——之中做选择,也很复杂。 乌克兰程序员 Paul Bagwell 画了一张分析图,说明应该怎么选择开源协议,大家看了一目了然,真是清爽。 最后请认准 Qt 官方网站Qt官网 2、为什么用Qt?用 Qt 来开发 Windows 桌面程序有以下优点: 简单易学:Qt 封装的很好,几行代码就可以开发出一个简单的客户端,不需要了解 Windows API。 资料丰富:资料丰富能够成倍降低学习成本,否则你只能去看源码,关于 DirectUI、Htmlayout、aardio 的资料就很少。 漂亮的界面:Qt 很容易做出漂亮的界面和炫酷的动画,而 MFC、WTL、wxWidgets 比较麻烦。 独立安装:Qt 程序最终会编译为本地代码,不需要其他库的支撑,而 Java 要安装虚拟机,C# 要安装 .NET Framework。 跨平台:如果你的程序需要运行在多个平台下,同时又希望降低开发成本,Qt 几乎是必备的。 3、Qt 和 MFC读者经常将 MFC 和 Qt 进行对比,MFC 只能应用在 Windows 平台,而 Qt 是跨平台的,一次编写,到处运行。 另外,Qt 已经封装了底层细节,学习 Qt 将会非常简单;而 MFC 只是给 Windows API 加了一层包装,不了解 Windows API 也学不好 MFC,大家普遍反映 MFC 难学。 我们不能简单地说 Qt 好还是 MFC 好,两者都有用武之地;但是初学者学习 Qt 会比较简单,不用应付那些烦人的 Windows API,很快就能开发出带有漂亮界面的应用程序。 五、Qt CreatorQt是开源的库 Qt Creator是一个集成开发环境 安装之后添加组件 1、找到Qt安装目录中的维护工具MaintenanceTool.exe手动添加储存库要定位一个储存有QT在线安装镜像的地址,这可难坏我了,但是经过不懈努力还是被我找到了(网址:http://download.qt.io/static/mirrorlist/)这个网站,显示了各国的qt镜像站点,中国有四个,我用的是中科大的站,点击HTTP会进入一个网络文件夹。 然后依次进入/online/qtsdkrepository/windows_x86/root/qt/ 最终的文件夹显示如下,在这个界面复制一下当前地址框地址 3、编码问题Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。 使用QtCreator创建的项目目录中不能包含中文和空格QtCreator默认使用Utf8格式编码对文件字符进行编码为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。GB2312 支持的汉字太少,1995年的汉字扩展规范GBK1.0,支持了更多的汉字。2000年的 GB18030取代了GBK1.0成为了正式的国家标准。Unicode 也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。 修改Qt Creator文件编码:菜单栏->工具->选项->文本编辑器->行为->文件编码 选择项目模板 填写项目名称和选择路径(不能包含中文和空格不能包含中文和空格不能包含中文和空格~) 定义编译系统(qmake即可) 选择窗口类信息 选择编译套件(用Qt Creator开发请选择MinGW Minimalist GNU for Windows) main.cpp 主函数所在的文件 #include "widget.h" //生成的窗口类头文件 #include //引用程序类头文件 int main(int argc, char *argv[]) { //创建应用程序对象, 在一个Qt项目中实例对象有且仅有一个 // 类的作用: 检测触发的事件, 进行事件循环并处理 QApplication a(argc, argv); //创建窗口对象 Widget w; //显示窗口 w.show(); //应用程序对象开始事件循环,保证应用程序不退出 return a.exec(); } widget.h 窗口类头文件 #ifndef WIDGET_H #define WIDGET_H #include //Qt标准窗口类头文件 class Widget : public QWidget //自己的类继承自Qwidget类 { Q_OBJECT //使用信号与槽机制,必须包含该宏 public: Widget(QWidget *parent = nullptr); ~Widget(); }; #endif // WIDGET_H widget.cpp 窗口类源文件 #include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { } Widget::~Widget() { } HelloQt.pro Qt项目文件,注释需要用#号 #项目编译时需要加载哪些模块 QT += core gui # 如果当前Qt版本大于4, 要添加一个额外的模块: widgets # Qt 5中对gui模块进行了拆分, 将 widgets 独立出来了 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets # 让Qt支持c++11标准 CONFIG += c++11 #如果您使用任何已标记为不推荐使用的Qt功能,则以下定义使您的编译器发出警告(确切的警告取决于您的编译器)。 #请参考不推荐使用的API的文档,以了解如何将您的代码移植远离它。 DEFINES += QT_DEPRECATED_WARNINGS #如果使用过时的API,您还可以使代码无法编译。 #为此,请取消注释以下行。 #您也可以选择仅在特定版本的Qt之前禁用已弃用的API。 #DEFINES + = QT_DISABLE_DEPRECATED_BEFORE = 0x060000 #禁用所有在Qt 6.0.0之前弃用的API # 项目中的源文件 删除后,项目里不会显示所有的源文件 SOURCES += \ main.cpp \ widget.cpp # 项目中的头文件 HEADERS += \ widget.h #部署的默认规则 qnx: target.path = /tmp/$${TARGET}/bin #嵌入式 else: unix:!android: target.path = /opt/$${TARGET}/bin #unix !isEmpty(target.path): INSTALLS += target pro是Qt的工程文件,这个文件是给qmake用来生成Makefile用的。 如果了解makefile的人应该知道,Makefile的三个关键点就是目标,依赖,命令。这里也很类似。pro文件中可以指明这个Qt项目的头文件,源文件,链接的外部库,目标文件名,模板(生成什么样的Makefile),版本配置(debug/release)等。 7、常用qmake变量添加新文件 打开Qt项目 其他 常用快捷键 运行 Ctrl + r 编译 Ctrl + b 注释 Ctrl + / 字体缩放 Ctrl + 鼠标滚轮 查找/替换 Ctrl + f 整行移动 Ctrl + Shift + ↑ 或 ↓ 自动对齐 Ctrl + i 帮助文档 第一种:Qt Creator 直接查看 F1 第二种:打开独立的帮助文档程序 assistant 同名.h 和 .cpp 之间的切换 F4 快速添加函数的定义 Alt + Enter 鼠标移动到函数申明上 修改变量名,并应用到所有用到该变量的地方 Ctrl + Shift +r 快速打开输出窗口 Alt + 数字键(1-8) 萝卜白菜各有所爱,如何修改QtCreator的主题呢? 菜单栏->工具->选项->文本编辑器 上面是选择系统自带的,当然也可以自己配置一个,我这配置了一个Vs白色主题的。 xml文件 Visual studio white(Qt creator代码样式).xml 把该文件复制到Qt的安装目录下的->Qt\Qt5.14.2\Tools\QtCreator\share\qtcreator\styles目录中 最后进入文本编辑器选择 八、Qt+VS2019为什么用VS写Qt程序? 很多人在Qt上写代码时,感觉不是很舒服,所以想在Vs上写Qt程序,而且Vs具有强大的调试能力,所以咱们可以通过一些配置实现此目的。 选择菜单栏->扩展->管理扩展 选择菜单栏的 扩展->管理扩展,输入Qt搜索,然后下载Qt Visual Studio Tools(下载灰常的银杏,慢的死~还不一定能下载) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDxZsEh1-1646484003126)(https://s2.loli.net/2022/03/05/p2bAk36K4M1jwzY.png)] 如果实在不能忍受这龟速,咱们来别的办法 先到Qt官网下载对于版本的插件,我这里是Vs2019: Qt官网插件下载 微软拓展商店下载 如果跳到如下页面,选择清华大学镜像源下载即可。 如果是通过Vs下载的,会自动安装。 如果是手动下载的,需要双击自己安装。 打开安装包之后,点击Install等待安装完成即可。 安装之前,请先关掉Vs没有关掉会出现如下界面,点击end tasks即可 关闭Vs之后,一秒安装完成 安装完成,关掉程序 4、设置插件再次打开Vs,扩展->Qt VS Tools->Qt Options 点击Qt Options之后会弹出如下界面 如果在弹出上述界面的同时,还弹出如下这个错误界面,不要担心,这是由于安装插件的时候,会自动配置,但是自动配置的路径和实际的Qt安装路径不一致,我们自己再配置一下就ok 首先删掉自动配置好的路径,然后点击Add自己添加一个,如下是具体的路径选项,选择msvc2017_64文件夹,点击确定即可 然后点击OK(Name是自己取的) 在Vs中点击新建项目,搜索Qt找到Qt Widgets Application然后点击下一步。 下一步之后,给项目取名称 然后从Debug和Release模式里选择一个即可(默认即可) 然后点击完成 最后,Ctrl+F5,大功告成 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGxW180D-1646484003138)(https://s2.loli.net/2022/03/05/ShpdE8lJuyPVHRr.png)] 6,中文乱码 由于windows默认的编码方式为GB2312,而Qt使用的是Unicode,两种编码方式不一样导致了乱码产生。 我们需要把代码文件改为utf-8保存,可以手动修改,也可以借助插件自动修改。 手动修改 VS隐藏了高级保存功能,导致没办法直接去设置代码编码。那么我们直接把高级保存功能调用出来即可: 单击“工具”|“自定义”命令,弹出“自定义”对话框。单击“命令”标签,进入“命令”选项卡;在“菜单栏”下拉列表中,选择“文件”选项;单击“添加命令”按钮,弹出“添加命令”对话框。 在“类别”列表中,选择“文件”选项;在“命令”列表中,选择“高级保存选项”选项。 单击“确定”。 自动修改 打开 VS2019,依次点击 工具 -> 扩展和更新,搜索插件 “ForceUTF8”,安装后源码文件会强制保存为带 BOM 的 UTF-8。 注意:修改之后,写C/C++代码会出现乱码,此时再进到插件->已安装吧Force UTF-8禁用掉,然后重启Vs即可 IDI_ICON1 ICON DISCARDABLE "zay.ico" 3,将.rc文件和.ico文件都放在项目的文件夹中在VS中右击Source File筛选器选择添加||现有项,将logo.rc和zay.ico文件添加到项目中,重新生成即可九、Qt Creator + MSVC先安装好Qt Creator和visual studio,前者做编辑器,用后者的编译器,最后安装一个调试器。 通过windows SDK工具安装调试器(CDB)。 下载之后安装即可 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTU7OuPv-1646484003141)(https://s2.loli.net/2022/03/05/1YE2uMzs7itgcyS.png)] 安装完成之后重新打开Qt Creator,会自动检测调试工具的路径。 安装Vs之后,编译器也会自动检测到(我这是安装了2019与2021,所以有很多) 最后需要自己选择一下,对应版本的编译器和调试器x64和x86都可以配置一下 中文乱码 如果出现乱码可以在.pro文件中加入以下代码 msvc { QMAKE_CFLAGS += /utf-8 #C语言编译器选项 QMAKE_CXXFLAGS+=/utf-8 #C++编译器选项 } 十、C++基础知识1、什么是C++C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。 2、如何定义一个类class Animal { public: Animal(const std::string& name,int age) :name(name),age(age) { } void cry() { std::cout |
CopyRight 2018-2019 实验室设备网 版权所有 |