Qt 是一个跨平台的 C++图形用户界面应用程序框架。
它为应用程序开发者提供建立艺术级图形界面所需的所有功能。
它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
1991 年 Qt 最早由奇趣科技开发
1996 年 进入商业领域,它也是目前流行的 Linux 桌面环境 KDE 的基础
2008 年 奇趣科技被诺基亚公司收购,Qt 称为诺基亚旗下的编程语言
2012 年 Qt 又被 Digia 公司收购
2014 年 4 月 跨平台的集成开发环境 Qt Creator3.1.0 发布,
同年 5 月 20 日配发了 Qt5.3 正式版,至此 Qt 实现了对 iOS、Android、WP 等各平台的全面支持。
商业版:
开源版:
下载地址:
http://www.qt.io/download-open-source/
或者
http://download.qt.io/archive/qt/
安装:
将下载到的QTLiunx版本拷贝到ubuntu的tools文件夹下
终端进入安装包所在的tools文件下
运行安装的run文件
命令:sudo ./qt-opensource-linux-x64-5.14.2.run
输入密码
点击下一步
注册或登录
选择安装位置,不要修改
选择安装的模块
断网准备安装
安装
耐心等待安装结束
配置环境变量:
进入qt安装路径/opt/Qt5.14.2A/5.14.2/gcc_64/bin,其中有qmake文件
打开bashrc文件,配置环境变量
sudo vi ~/.bashrc
将 export PATH=qmake文件所在路径:$PATH 添加到文件尾部
如:export PATH=/opt/Qt5.14.2A/5.14.2/gcc_64/bin:$PATH
重启bashrc
source ~/.bashrc
查询qmake命令是否生效
注意安装路径,其他一路next。
在不使用集成开发环境的情况下:
步骤:
1,创建一个空文件夹
2,在该文件夹创建xxx.pro文件
3,在该文件夹中创建main.cpp文件
4,在该文件夹中创建widget.h文件
5,在该文件夹中创建widget.cpp文件
6,编写xxx.pro文件
7,编写main.cpp
8,编写widget.h与widget.cpp文件
步骤1:选择新建
方式二
点击左上角文件 -- 新建文件或项目
步骤2:选择项目类型
步骤3:填写项目名称与存储位置
将项目拷贝到liunx系统中
终端进入项目所在文件夹
使用qmake命令生成makefile文件
命令:qmake
使用make命令生产可执行文件
命令: make
注意:如果出现以下问题需要安装libgl1-mesa-dev
命令:sudo apt-get install libgl1-mesa-dev
运行
命令:./项目名
# 添加源信息: core核心源码, gui图形化源码
QT += core gui
# 如果Qt版本大于4,没 QT添加 widgets组件库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#生成的.exe文件名
TARGET = demo01
#模板类型,app表示应用程序模板
TEMPLATE = app
# 使用 c++11 标准
# g++ -std=c++11
CONFIG += c++11
# Qt 过时警告
DEFINES += QT_DEPRECATED_WARNINGS
# cpp的源文件 【重要】
SOURCES += \main.cpp \widget.cpp
# 头文件 【重要】
HEADERS += \widget.h
# 编译时输出的可执行程序的名称
TARGET = hello
# 部署安装时的选项,qnx是嵌入式的操作系统的名称
qnx: target.path = /tmp/$${TARGET}/bin
# 如果不是qnx,是unix非Android时,安装的目标位置是 /opt/../bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
# 如果target.path路径非空时,则设置安装路径
!isEmpty(target.path): INSTALLS += target
QT的帮助文档
QObject
Qwidget
QMainWindow
QPushButton
...
Qt的对象模型,又称之为对象树, 即子组件与父组件的关系(非父子类关系)。
在 Qt 中创建对象的时候会提供一个 Parent 对象指针
, 即为 父组件对象的指针
。
QObject 是以对象树的形式组织起来的:
parent
,也就是父对象指针。自动添加
到其父parent对象的 children() 列表,QWidget 是能够在屏幕上显示的一切组件的父类:
Qt 引入对象树的概念,在一定程度上解决了内存问题。
如果 QObject 在栈上创建,Qt 保持同样的行为。正常情况下,这也不会发生什么问题。 但是在局部代码块中创建时,程序运行之后则会动释放,界面上不会显示。
在 Qt 中,尽量在构造的时候就指定 parent 对象,并且大胆在堆上创建。