QT使用记录

QT概述

QT5模块简介

原文链接
相比于QT4,QT5对模块有了更细的划分。
Qt 5 模块分为 Essentials Modules (基础模块)和 Add-on Modules(扩展模块)。
基础模块:

  • Qt Core,提供核心的非 GUI 功能,所有模块都需要这个模块。这个模块的类包括了动画框架、定时器、各个容器类、时间日期类、事件、IO、JSON、插件机制、智能指针、图形(矩形、路径等)、线程、XML 等。所有这些类都可以通过…头文件引入。
  • Qt Gui,提供 GUI 程序的基本功能,包括与窗口系统的集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 图像、字体、拖放等。这些类一般由 Qt 用户界面类内部使用,当然也可以用于访问底层的 OpenGL ES 图像 API。Qt Gui 模块提供的是所有图形用户界面程序都需要的通用功能。
  • Qt Multimedia,提供视频、音频、收音机以及摄像头等功能。这些类可以通过…引入,而且需要在 pro 文件中添加 QT += multimedia。
  • Qt Network,提供跨平台的网络功能。这些类可以通过…引入,而且需要在 pro 文件中添加 QT += network。
  • Qt Qml,提供供 QML(一种脚本语言,也提供 JavaScript 的交互机制) 使用的 C++ API。这些类可以通过…引入,而且需要在 pro 文件中添加 QT += qml。
  • Qt Quick,允许在 Qt/C++ 程序中嵌入 Qt Quick(一种基于 Qt 的高度动画的用户界面,适合于移动平台开发)。这些类可以通过…引入,而且需要在 pro 文件中添加 QT += quick。
  • Qt SQL,允许使用 SQL 访问数据库。这些类可以通过…引入,而且需要在 pro 文件中添加 QT += sql。
  • Qt Test,提供 Qt 程序的单元测试功能。这些类可以通过…引入,而且需要在 pro 文件中添加 QT += testlib。
  • Qt Webkit,基于 WebKit2 的实现以及一套全新的 QML API(顺便说一下,Qt 4.8 附带的是 QtWebkit 2.2)。

扩展模块:

  • Qt 3D,提供声明式语法,在 Qt 程序中可以简单地嵌入 3D 图像。Qt 3D 为 Qt Quick 添加了 3D 内容渲染。Qt 3D 提供了 QML 和 C++ 两套 API,用于开发 3D 程序。
  • Qt Bluetooth,提供用于访问蓝牙无线设备的 C++ 和 QML API。
  • Qt Contacts,用于访问地址簿或者联系人数据库的 C++ 和 QML API。
  • Qt Concurrent,封装了底层线程技术的类库,方便开发多线程程序。
  • Qt D-Bus,这是一个仅供 Unix 平台使用的类库,用于利用 D-Bus 协议进行进程间交互。
  • Qt Graphical Effects,提供一系列用于实现图像特效的类,比如模糊、锐化等。
  • Qt Image Formats,支持图片格式的一系列插件,包括 TIFF、MNG、TGA 和 WBMP。
  • Qt JS Backend,该模块没有公开的 API,是 V8 JavaScript 引擎的一个移植。这个模块仅供 QtQml 模块内部使用。
  • Qt Location,提供定位机制、地图和导航技术、位置搜索等功能的 QML 和 C++ API。
  • Qt OpenGL,方便在 Qt 应用程序中使用 OpenGL。该模块仅仅为了程序从 Qt 4 移植到 Qt 5 的方便才保留下来,如果你需要在新的 Qt 5 程序中使用 OpenGL 相关技术,需要使用的是 QtGui 模块中的 QOpenGL。
  • Qt Organizer,使用 QML 和 C++ API 访问组织事件(organizer event)。organizer API 是 Personal Information Management API 的一部分,用于访问 Calendar 信息。通过 Organizer API 可以实现:从日历数据库访问日历时间、导入 iCalendar 事件或者将自己的事件导出到 iCalendar。
  • Qt Print Support,提供对打印功能的支持。
  • Qt Publish and Subscribe,为应用程序提供对项目值的读取、导航、订阅等的功能。
  • Qt Quick 1,从 Qt 4 移植过来的 QtDeclarative 模块,用于提供与 Qt 4 的兼容。如果你需要开发新的程序,需要使用 QtQuick 模块。
  • Qt Script,提供脚本化机制。这也是为提供与 Qt 4 的兼容性,如果要使用脚本化支持,请使用 QtQml 模块的 QJS* 类。
  • Qt Script Tools,为使用了 Qt Script 模块的应用程序提供的额外的组件。
  • Qt Sensors,提供访问各类传感器的 QML 和 C++ 接口。
  • Qt Service Framework,提供客户端发现其他设备的服务。Qt Service Framework 为在不同平台上发现、实现和访问服务定义了一套统一的机制。
  • Qt SVG,提供渲染和创建 SVG 文件的功能。
  • Qt System Info,提供一套 API,用于发现系统相关的信息,比如电池使用量、锁屏、硬件特性等。
  • Qt Tools,提供了 Qt 开发的方便工具,包括 Qt CLucene、Qt Designer、Qt Help 以及 Qt UI Tools 。
  • Qt Versit,提供了对 Versit API 的支持。Versit API 是 Personal Information Management API 的一部分,用于 QContacts 和 vCard 以及 QOrganizerItems 和 iCalendar 之间的相互转换。
  • Qt Wayland,仅用于 Linux 平台,用于替代 QWS,包括 Qt Compositor API(server)和 Wayland 平台插件(clients)。
  • Qt WebKit,从 Qt 4 移植来的基于 WebKit1 和 QWidget 的 API。
  • Qt Widgets,使用 C++ 扩展的 Qt Gui 模块,提供了一些界面组件,比如按钮、单选框等。
  • Qt XML,SAX 和 DOM 的 C++ 实现。该模块已经废除,请使用QXmlStreamReader/Writer。
  • Qt XML Patterns,提供对 XPath、XQuery、XSLT 和 XML Schema 验证的支持。

QT5常用类

QFile

  1. Note: In WriteOnly or ReadWrite mode, if the relevant file does not already exist, this function will try to create a new file before opening it.

QXmlStreamWriter

xml文件

  1. <DirInfo dirFullName="/home/liuqiang/Documents/BG/train/BG-HAO" imageNumber="2873"/>
    只有属性没有内容的元素,只有开始标签,结束标志是属性结尾处的 /

QAction

一个action是一个动作,action可以有图标、文字、悬浮提示、快捷键

QToolBox

QButtonGroup

.h文件

QButtonGroup *buttonGroup;

.cpp文件

buttonGroup = new QButtonGroup(this);
buttonGroup->setExclusive(false); ///设置不互斥,使可多选

Ubuntu下使用cmake编译QT工程

  1. QT对cmake的版本有要求,需要安装较高版本的cmake,具体要求可查看相关说明,这里安装的是 cmake3.19.8
  2. 在 QT Creator 中编译工程只需要在工具链中选择安装好的cmake即可,一般会自动识别
  3. 如果要在终端中使用cmake命令进行编译,需要设置变量 CMAKE_PREFIX_PATH,我的路径为 /home/jzz/Qt5.12.10/5.12.10/gcc_64/lib/cmake/Qt5,该路径下需要包含 Qt5Config.cmake 或类似文件,设置变量的目的是cmake可以找到 QT5 的库文件。
  4. 设置方法:
    (1)在终端中直接运行命令
    export CMAKE_PREFIX_PATH=/home/jzz/Qt5.12.10/5.12.10/gcc_64/lib/cmake/Qt5
    
    该设置仅在此次终端中有效。
    (2)按网上的教程,将(1)中的命令添加到 /etc/profile文件中,在运行命令
    source /etc/profile
    
    但效果仍是在此次终端中有效。
    (3)将(2)中的命令添加到 ~/.bashrc 中,或者直接将 (1)中的命令添加到 ~/.bashrc 中,达成目标

QT错误

  1. QT工程不能含有中文路径
  2. 当编译旧的QT工程出现问题时,可以删除工程中除 .pro、.cpp、.h文件外的其它历史文件。
  3. Ubuntu下Qt窗口菜单栏menubar最大化才显示,解决:系统设置->外观->行为->在窗口的标题栏->总是显示

QT 组件构造函数的父指针

有待进一步学习

程序写的多了,你会发现几乎所有的Qt类的构造函数都会有一个parent参数。这个参数通常是QObject* 或者是 QWidget* 类型的(定义新的类是通常首先初始化为0,在类的实现函数中赋值)。很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题。于是,稍微偷懒一下,就会不自觉的忽略了这个参数。那么,这个参数到底是干什么用的呢?
有了此参数,子类才会继承父类在构造函数中初始化了的数据,否则,父类的初始化数据的构造函数不执行,无法继承数据,如果吧数据定为私有的,又不便于类的通用继承。

其实,这个参数有很多用处。就像它的名字一样,这个参数指定了组件的父组件。对于一个对话框来说,对话框一般是不作为顶层容器出现的,因此在任务栏上一般是没有对话框的位置的。怎么指定这个对话框不是顶层容器呢?有父组件的组件不就不是顶层容器了吗?因此,只要你指定对话框的parent属性,任务栏就不会出现它的身影。当然,如果你不指定,这个对话框就成为顶层容器了,任务栏会给它留个位置的——利用这个特性,就可以实现特殊对话框可以在任务栏出现的效果,比如“关于”对话框的出现。

另外比较通用,也是很重要的作用是,parent参数指明了组件的父组件,这样,当父组件delete时,Qt可以保证所有子组件——也就是 parent指针指向这个组件的所有组件——都会被正确的delete掉。这是Qt能够帮助我们管理一部分内存的原因所在。Qt是通过遍历parent属性来防止了这一部分内存泄漏的。因此,必要情况下还是不要忘记设置这个parent属性。当然,如果你不声明这个属性,当整个程序关闭时,操作系统会回收内存——因此我们所说的内存泄漏一般是指我们自己写的应用程序的内部,而不会影响到整个操作系统——当然,如果你实现太可恶,操作系统也会受不了自动关掉你的程序的:-)

待查询的内容

QT pro文件

预编译 DEFINES
CONFIG += qaxcontainer

Q_OBJECT

使用信号与槽的类 必须在类中声明宏 Q_OBJECT

注意

  1. 同名cpp文件导致先生成的obj文件被后生成的obj覆盖

学习QT示例

diagramscene

示例路径

/home/jzz/Qt5.12.10/Examples/Qt-5.12.10/widgets/graphicsview/diagramscene

学习方法

新建空白工程从0构建

第一步:构建工具栏,toolbar

toolbar上有很多图标,一个图标是一个 action(动作),所以先用函数 createActions,设置了很多actions的属性。

Draggable Icons Example

可拖动的图标

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值