【QT5】学习整理包含引用资料
视频学习资料
[【6天学会QT】 视频教程及QT5.11.1安装包安装方法][含代码]](https://www.bilibili.com/video/BV1hg4y1B7Vu?from=search&seid=5027617501488094496 "【6天学会QT】 视频教程及QT5.11.1安装包安装方法][含代码]")
总结64位CentOs下安装QT遇到的问题和解决方法
回顾总结64位CentOs下安装QT遇到的问题和解决方法
Qt是什么
Qt是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。
Qt 是纯 C++ 开发的
Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。
Qt的优势
短平快---(投资少,周期短,见效快,收益高)
一次编码,随处编译
QML 是什么
QML 类似于网页设计的 HTML,是一种标记语言,我们可以借助 CSS 对它进行美化,也可以借助 JavaScript 进行交互。有 Web 开发经验的读者学习 QML 将非常轻松。
Qt5 linux环境(Ubuntu)运行报错解决
Could not start process "make" qmake_all
sudo apt-get install build-essential
-1: error: 找不到 -lGL
sudo apt-get install libqt5-dev
sudo apt-get install libgl1-mesa-dev
没有编译工具
sudo apt-get install g++
Centos7下安装Qt5.9
下载地址
资源下载网址:
http://download.qt.io/official_releases/qt/
预安装
yum -y install mesa-libGL-devel mesa-libGLU-devel freeglut-devel
下载
方法一:
wget http://download.qt.io/official_releases/qt/5.9/5.9.5/qt-opensource-linux-x64-5.9.5.run
方法二:
官网本地下载,上传centOS
赋予可执行的权限
chmod +x qt-opensource-linux-x64-5.9.5.run
进行安装
./qt-opensource-linux-x64-5.9.5.run
配置环境
将路径加入到 /etc/ld.so.conf
中
设置PATH环境变量
vi ~/.bashrc
在PATH后加入:
:/opt/Qt5.9.5/5.9.5/gcc_64/bin:/opt/Qt5.9.5/Tools/QtCreator/bin
刷新bashrc
source ~/.bashrc
验证
输入qtcreator后,进入应用。选择示例(Examples),输入clock
然后在下面选择一个,build,run,运行成功
Qt编译
保存 hello.cpp,编译过程如下:
在 hello.cpp 所在目录下,运行命令
qmake -project
hello.cpp 同目录下有 hello.pro 文件被生成,它是与平台无关的工程文件。
在 hello.cpp 所在目录下,运行命令
qmake hello.pro
同目录下有 Makefile 文件被生成(Makefile是指导编译器编译源代码的配置文件,在其目录下输入make命令(nmake在win32,vc6环境)就可以完成编译)。
在 hello.cpp 所在目录下,运行命令
make
同目录下有 hello,hello.o 两个文件被编译生成。其中 hello 就是在当前 Linux 系统下使用 Qt 编译生成的可执行文件了。双击运行 hello,“Hello Qt!“ 文本框弹出,OK!做到这一步,证明 Qt 已经完全可以在你的电脑上运作了
Qt Creator 的常用快捷键
帮助:F1
.h和.cpp文件之间切换:F4
编译运行:Ctrl+R
函数声明和定义(函数调用和定义)切换:F2
代码注释取消:Ctrl+/
字体变大变小:Ctrl+鼠标滚轮
移动代码:选中需要移动代码--》 Ctrl+shift+方向键
查找替换关键字:Ctrl+F查找替换关键字:Ctrl+F
快速打开代码所在目录:编辑模式下-》选中项目文件夹-》右击-》选择“显示包含的目录”
Qt命名规范
类名:单词首字母大写,单词和单词之间直接连接,无需连接字符
函数名字: 首字母小写(驼峰式)
Qt中内置类,头文件和类名同名
Linux Qt cannot find -lGL错误完美解决方案
在 /usr/lib/ 目录下为 OpenGL 链接库创建一个链接,并去掉版本号。
如果你不知道当前 Linux 系统中 libGL.so 的具体路径,可以使用locate libGL
命令或find /usr -name libGL*
命令查找,然后使用ln -s
创建链接。请看下面的演示:
查找 libGL 所在位置
[root@localhost ~]# locate libGL
/usr/lib64/libGL.so
/usr/lib64/libGL.so.1
/usr/lib64/libGL.so.1.2.0
/usr/share/doc/mesa-libGL-9.2.5
/usr/share/doc/mesa-libGL-9.2.5/COPYING
#创建链接
[root@localhost ~]# ln -s /usr/lib64/libGL.so.1 /usr/lib/libGL.so
Linux 系统中可能存在多个版本的 libGL.so,为任意一个版本创建链接即可。普通用户没有权限创建链接,所以我使用了 root 用户。
Qt Creator 可以创建
各类应用程序如下:
Qt Widgets Application支持桌面平台的有图形用户界面(Graphic User Interface,GUI) 界面的应用程序。GUI 的设计完全基于 C++ 语言,采用 Qt 提供的一套 C++ 类库。
Qt Console Application,控制台应用程序,无 GUI 界面,一般用于学习 C/C++ 语言,只需要简单的输入输出操作时可创建此类项目。
Qt Quick Application,创建可部署的 Qt Quick 2 应用程序。Qt Quick 是 Qt 支持的一套 GUI 开发架构,其界面设计采用 QML 语言,程序架构采用 C++ 语言。利用 Qt Quick 可以设计非常炫的用户界面,一般用于移动设备或嵌入式设备上无边框的应用程序的设计。
Qt Quick Controls 2 Application,创建基于 Qt Quick Controls 2 组件的可部署的 Qt Quick 2 应用程序。Qt Quick Controls 2 组件只有 Qt 5.7 及以后版本才有。
Qt Canvas 3D Application,创建 Qt Canvas 3D QML 项目,也是基于 QML 语言的界面设计,支持 3D 画布。
组管理着项目内的各种源文件,几个文件及分组分别为以下几项
Demo.pro 是项目管理文件,包括一些对项目的设置项。
Headers 分组,该节点下是项目内的所有头文件(.h),图 5 中所示项目有一个头文件 mainwindow.h,是主窗口类的头文件。
Sources 分组:该节点下是项目内的所有 C++源文件(.cpp),图 5 中所示项目有两个 C++ 源文件,mainwindow.cpp 是主窗口类的实现文件,与 mainwindow.h 文件对应。main.cpp 是主函数文件,也是应用程序的入口。
Forms 分组:该节点下是项目内的所有界面文件(.ui)。图 5 中所示项目有一个界面文件mainwindow.ui,是主窗口的界面文件。界面文件是文本文件,使用 XML 语言描述界面的组成。
.pro文件
后缀为“.pro”的文件是项目的管理文件,文件名就是项目的名称,项目管理文件用于记录项目的一些设置,以及项目包含文件的组织管理。
例如:
samp2_1.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = samp2_1
TEMPLATE = app
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
“Qt += core gui”表示项目中加入 core gui 模块。core gui 是 Qt 用于 GUI 设计的类库模块,如果创建的是控制台(Console)应用程序,就不需要添加 core gui。
Qt 类库以模块的形式组织各种功能的类,根据项目涉及的功能需求,在项目中添加适当的类库模块支持。例如,如果项目中使用到了涉及数据库操作的类就需要用到 sql 模块,在 pro 文件中需要增加如下一行:
Qt +=sql
samp2_1.pro 中的第 2 行是:
greaterThan(Qt_MAJOR_VERSION, 4): Qt += widget
s
这是个条件执行语句,表示当 Qt 主版本大于 4 时,才加入 widgets 模块。
“TARGET = samp2_1
”表示生成的目标可执行文件的名称,即编译后生成的可执行文件是 samp2_1.exe
“TEMPLATE = app
”表示项目使用的模板是 app,是一般的应用程序。
后面的 SOURCES、HEADERS、FORMS 记录了项目中包含的源程序文件、头文件和窗体文件(.ui 文件)的名称。这些文件列表是 Qt Creator 自动添加到项目管理文件里面的,用户不需要手动修改。当添加一个文件到项目,或从项目里删除一个文件时,项目管理文件里的条目会自动修改
.ui文件
Qt 项目中,后缀为“.ui”的文件是可视化设计的窗体的定义文件,如 widget.ui。双击项目文件目录树中的文件 widget.ui,会打开一个集成在 Qt Creator 中的 Qt Designer 对窗体进行可视化设计
UI 设计器有以下一些功能区域:
- 组件面板:窗口左侧是界面设计组件面板,分为多个组,如Layouts、Buttons、Display Widgets等,界面设计的常见组件都可以在组件面板里找到。
- 中间主要区域是待设计的窗体。如果要将某个组件放置到窗体上时,从组件面板上拖放一个组件到窗体上即可。例如,先放一个 Label 和一个 Push Button 到窗体上。
- Signals 和 Slots 编辑器与 Action 编辑器是位于待设计窗体下方的两个编辑器。Signals 和Slots 编辑器用于可视化地进行信号与槽的关联,Action 编辑器用于可视化设计 Action。
- 布局和界面设计工具栏:窗口上方的一个工具栏,工具栏上的按钮主要实现布局和界面设计。
- 对象浏览器(Object Inspector):窗口右上方是 Object Inspector,用树状视图显示窗体上各组件之间的布局包含关系,视图有两列,显示每个组件的对象名称(ObjectName)和类名称。
- 属性编辑器(Property Editor):窗口右下方是属性编辑器,是界面设计时最常用到的编辑器。属性编辑器显示某个选中的组件或窗体的各种属性及其取值,可以在属性编辑器里修改这些属性的值。
main.cpp
是实现 main() 函数的文件,下面是 main.cpp 文件的内容
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //定义并创建应用程序
Widget w; //定义并创建窗口
w.show(); //显示窗口
return a.exec(); //应用程序运行
}
main() 函数是应用程序的入口。它的主要功能是创建应用程序,创建窗口,显示窗口,并运行应用程序,开始应用程序的消息循环和事件处理。
QApplication 是 Qt 的标准应用程序类,第 1 行代码定义了一个 QApplication 类的实例 a,就是应用程序对象。
然后定义了一个 Widget 类的变量 w,Widget 是本实例设计的窗口的类名,定义此窗口后再用 w.show() 显示此窗口。
最后一行用 a.exec() 启动应用程序的执行,开始应用程序的消息循环和事件处理
Qt创建基类项目选择
三种选择:
QWidget(父类,基类)
QMainWindow
QDiaLog
创建需要有菜单栏,工具栏,状态栏的窗口就需要用QMainWindow
穿件对话框窗口使用QDiaLog
自定义槽函数
/*
* 槽函数在Qt5中 可以是任意成员函数,全局函数,静态函数,lambda表达式
* 槽函数需要与信号对应(返回值,参数)
* 信号没有返回值,槽函数返回值void
* 槽函数参数不能多于信号函数,可以少于
*/
connect(b1, &QPushButton::clicked, this, &MainWidget::soltForMainWidget);
void MainWidget::soltForMainWidget()
{
b2->setText("我被老大修改了!");
}
注意:.h文件中添加自定义函数
//自定义函数
void soltForMainWidget();
UI
Line Edit :单行文本框
Text Edit:多行文本框,可以显示文本,可以显示THML标签
Plain Text Edit:多行文本框,只能显示文本
在窗口中添加按钮
类名:QPushButton
设置按钮显示的内容:setText
移动按钮位置:move
按钮设置父窗口:setParent
设置窗口大小:resize() resizeFixed()
Qt的坐标体系
坐标原点:左上角
X轴延伸方向:向右递增
Y轴延伸方向:向下递增
Qt内存回收机制
满足以下条件,不需要手动回收
从QObject类直接或间接派生
给直接或间接派生出的类指定父对象
信号和槽[信号不需要实现,槽需要实现]
格式
connect(信号发出者(指针), &className::clicked, 信号接收者(指针), &classB::slot);
标准信号槽的使用
F1查看有哪些
自定义槽函数
返回值 void
可以重载
需要使用signals 声明
不需要函数定义
带参数的信号(槽)
重载时候:信号槽发生了重载,需要使用函数指针
qt4 信号槽的使用
SIGNALS(信号的函数名(int,long)) SLOT(槽函数名(int,long))
拓展知识
信号可以连接信号(参数的对应)
一个信号可以连接多个槽函数
多个信号可以连接同一个槽函数
槽函数可以使用lambda表达式
lambda表达式
=
{
}
在工程文件.pro里面添加 CONFIG += c++11
【QT5】学习整理包含引用资料的更多相关文章
- Wix学习整理(5)——安装时填写注册表
原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...
- Wix学习整理(6)——安装快捷方式
原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...
- Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析
原文:Wix学习整理(4)--关于WiX文件格式和案例HelloWorld的分析 关于WiX文件格式 .wxs是WiX的源文件扩展名..wxs文件以类XML文件的格式来指定了要构造Windows In ...
- Unity CommandBuffer的一些学习整理
1.前言 近期在整理CommandBuffer这块资料,之前的了解一直较为混乱. 算不上新东西了,但个人觉得有些时候要比加一个摄像机再转RT廉价一些,至少省了深度排序这些操作. 本文使用两个例子讲解C ...
- Spring IOC设计原理解析:本文乃学习整理参考而来
Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. I ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- Wix学习整理(3)——关于Windows Installer和MSI
原文:Wix学习整理(3)--关于Windows Installer和MSI 关于Windows Installer Windows Installer是微软Windows操作系统自带的一个软件安装和 ...
- TweenMax学习整理--特有属性
TweenMax学习整理--特有属性 构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...
- PHP的学习--图解PHP引用
在一篇文章中看到关于PHP引用的图解,对于加深对PHP引用的理解很有帮助,在这里备份一下. 如果你对PHP的引用一点也不了解,可以先看我之前的博客:PHP的学习--PHP的引用
随机推荐
- DevExpress各大版本支持的VS版本和支持的.net版本图
如下图所示,绿色Yes代表支持,红色No代表不支持.对于有些人觉得装了dev后,vs工具箱没有,一般都是以下两大问题:1.要么你的Dev的版本不支持你当前的VS版本,没有很正常.2.要么你的项目的.n ...
- HDLbits——Exams/2014 q4b
题目要求 使用verilog描述如图所示得移位寄存器: Write a top-level Verilog module (named top_module) for the shift regist ...
- ubuntu 16.04 Chrome安装
打开终端 输入 命令1:sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list ...
- UCF Local Programming Contest 2018 C. First Last Sorting 思维、简单DP
C. First Last Sorting链接:https://nanti.jisuanke.com/t/44141
- 【剑指Offer】【链表】反转链表
题目:输入一个链表,反转链表后,输出新链表的表头. A:定义3个结点,pNode作移动指针,pRet作输出指针,pPrev作前驱指针 在pNode没有到达链尾之前,循环里创建pNext指针记录p ...
- Kubernetes--管理Pod对象的容器(2)
自定义运行的容器化应用 由Docker镜像启动容器时运行的应用程序在相应的Dockerfile中由ENTRYPOINT指令进行定义,传递给程序的参数则通过CMD指令指定,ENTRYPOINT指令不存在 ...
- 记一次p标签内容不换行记录
p标签内容l里面如果全部是英文,那么默认是不会换行的. 需要添加word-wrap: break-word; 属性 这样就会自动换行了
- node中get和post接口
接口传参 使用ajax请求向服务器接口传参,按http协议的约定,每个请求都有三个部分: 请求行: 保存了请求方式,地址,可以以查询字符串的格式附加一部分数据. 请求头:它可以附加很多信息,其中con ...
- 医学分割 不确定性 2019 MICCAI
z今天分享一篇发表在MICCAI 2019上的论文: Uncertainty-aware Self-ensembling Model for Semi-supervised 3D Left Atriu ...
- C# DataTable.Select()根据条件筛选数据
1.前言: 很多时候我们获取到一个表的时候需要根据表的包含的队列去筛选内容,一般来说可能想到的就是遍历整个表的内容进行条件筛选,但是这种方式增加了代码量且易出错,DataTable.Select()就 ...