QT 5.9学习笔记

写在前面

本文章为我在学习QT5.9时的记录文章,里面会涉及所有在学习过程中有关安装,使用,编程的相关知识点和技巧,在一套教程学习完毕后,我将再次整理本笔记,将其中重要的坑点,知识点和一些技巧和问题解决等整理成专栏,敬请大家静待花开,谢谢!

S1:初识QT:QT简介

文本来源:百度百科和博客园(https://www.cnblogs.com/yyc954330712/p/9550767.html)

Qt 是一个跨平台应用程序和 UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

一、Qt的简介

Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。

二、Qt的由来和发展

Haavard Nord 和Eirik Chambe-Eng于1991年开始开发"Qt"。

1994年3月4日创立公司,早名为Quasar Technologies,然后更名为Troll Tech,然后在改为Trolltech,中文名是“奇趣科技”。

2008年6月17日被NOKIA公司收购,以增强该公司在跨平台软件研发方面的实力,更名Qt Software。

该工具包名为Qt是因为字母 Q在Haavard的Emacs字体特别漂亮,而“t”代表“toolkit”,灵感来自Xt,X toolkit。

2009年5月11日,诺基亚Qt Software 宣布 Qt源代码管理系统面向公众开放,Qt 开发人员可通过为 Qt 以及与 Qt 相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造 Qt未来的发展。为了便于这些内容的管理,Qt Software 启用了基于 Git 和 Gitorious 开源项目的Web 源代码管理系统。
  在推出开放式 Qt 代码库的同时,Qt Software 在其网站发布了其产品规划(Roadmap)。其中概述了研发项目中的新功能,展现了现阶段对 Qt 未来发展方向的观点,以期鼓励社区提供反馈和贡献代码,共同引导和塑造 Qt 的未来。

三、为什么选择Qt

1、本质上来说, Qt是一个跨平台的C++应用程序开发框架,有时又被称为C++部件工具箱。Qt被用在KDE桌面环境、Opera、Google Earth、Skype、Adobe Photoshop Album和VirtualBox的开发中,使用 Qt ,只需一次性开发应用程序和用户界面,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

2、 优良的跨平台特性,Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。

3、面向对象,Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。

4、丰富的 API,Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。

5、支持 2D/3D 图形渲染,支持 OpenGL,大量的开发文档,XML 支持。

S2:QT在Windows和Linux平台下的安装

三种平台的QT获取地址:
https://download.qt.io/official_releases/qt/
我安装的是QT5.9版本

几点提示:

1.QT实际上分为离线安装版和在线安装版,在QTCN中可以找到在线安装版,我给的网址上是离线安装包,个人建议下载离线安装包。

2.建议不要选择最新版本:
我在Linux系统中安装最新的QT 5.14.1 尝试了一些方法,安装程序也无法运行
换为QT5.9 安装十分顺利。

3.安装的时候提示注册或者登陆QT账号(貌似强制,没看到如何Skip),所以安装的时候要联网。

4.出现选择组件界面,个人建议全部选中,避免之后缺组件的麻烦
(windows预留15GB安装,Linux要小于这个值)
就是这个画面,建议全部打勾:
在这里插入图片描述
安装之后建立一个新的工程试一下,能够编译,运行才说明QT安装的正确,可以往下了。

Qt调出模态与非模态对话框

这里我个人推荐就写这两种写法
非模态:

WclcomeDialog *dlg = new QDialog;
dlg->setAttribute(Qt::WA_DeleteOnClose);// 设置对话框关闭时,自动销毁对话框
dlg->show();

模态:

WclcomeDialog *dlg = new QDialog;
dlg->deleteLater();
dlg->exec();

分割线


首先要建立一个Qt设计师类中的Dialog类,然后该布局布局。
有很多方法调出这个Dialog,我们先再给推荐写法,再都写上。
模态调用:

  1. 模态对话框:正常(对象在栈上创建)
WclcomeDialog dlg;
dlg.exec();
  1. 非模态对话框:会一闪而过(对象在栈上创建)
WclcomeDialog dlg;
dlg.show(); 

这种情况下弹出后一闪而过的原因:
show()函数不会阻塞当前线程,对话框会显示出来,接着show()函数立即返回,代码继续执行槽函数中后续代码。
dialog 是建立在栈上的,show()函数返回后,当槽函数运行结束后,dialog 超出作用域被析构,因此对话框消失了。
知道了此原因,我们将 dialog 改成堆上建立,就不会出现一闪而过的问题了,如下面例子3

  1. 非模态对话框:正常(对象在堆上创建)
WclcomeDialog *dlg = new QDialog;
dlg->setAttribute(Qt::WA_DeleteOnClose);// 设置对话框关闭时,自动销毁对话框
dlg->show();

setAttribute()函数设置对话框关闭时,自动销毁对话框

  1. 模态对话框:正常(对象在堆上创建)
WclcomeDialog *dlg = new QDialog;
dlg->deleteLater();
dlg->exec();

使用exec()会开始一个新的事件循环,deleteLater()函数会在当前事件循环结束时销毁该对话框

  1. 非模态对话框:会一闪而过(对象在堆上创建)
WclcomeDialog *dlg = new QDialog;
dlg->deleteLater();
dlg->show();

这种情况下弹出后一闪而过的原因:
如果是 dlg->show(),则只能使用 dlg->setAttribute(Qt::WA_DeleteOnClose);
如果要使用 dialog->deleteLater(),则必须使用 dialog->exec()。
这是因为 deleteLater() 会在事件循环结束时执行,exec()会开始一个新的事件循环,而show() 不开始新的事件循环,所以会一闪而过。

  1. 模态对话框:正常(对象在堆上创建)
WclcomeDialog *dlg = new QDialog;
dlg->setModal(true);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();
发布了35 篇原创文章 · 获赞 86 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/whstudio123/article/details/104419471
今日推荐