重头开始学Qt——day1
以前学过Qt,但只是为了学分,现在重学。
1. 认识Qt应用程序框架
直接新建一个项目后,自动生成了一下文件,下面一个个理解。

(1)main.cpp
main.cpp中特别的是QApplication a,和 a.exec();
如果不构造 QApplication 对象,直接编译并运行,
结果:
成功生成可执行文件,并且成功执行,但立即退出,并打印异常信息:
QWidget: Must construct a QApplication before a QWidget
上面实验说明 QApplication 对象被 QWidget 对象使用。
此外,将 a.exec(); 换成死循环。
结果:

QWidget会显示,但是无法响应用户操作。
经过上面两个实验,可以得出下面结论:
QApplication 被 QWidget 调用,QApplication 会捕捉用户输入,将其传给 QWidget。
(2).pro文件
QT += core gui
这是加入链接模块。
问题是如何知道需要什么模块呢?
对使用的类按F1就可以获得,
greaterThan(QT_MAJOR_VERSION, ): QT += widgets
这是兼容Qt4以上版本
TARGET = 01_test
这是指定目标名称,也就是最终生成的可执行文件名称
TEMPLATE = app
生成应用程序,其他二进制文件
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
类似Makefile
(3)Qt的生成应用程序的过程
发现Qt生成应用程序有两步:qmake 和 构建
实验发现 qmake 是生成指导编译链接的Makefile,和建立两个文件夹debug和release

构建应该就是运行makefile
2. 父对象与子对象
父子对象不是继承关系,有点像组合。
大概有三个性质:
(1)父子对象机制是在QObject类中实现的,只有继承了QObject才能使用父子对象机制。
(2)父对象show时,子对象也会show,但是子对象不能单独show,子对象的坐标是相对于父对象的。
(3)父对象析构时,会先析构其子对象,子对象会析构孙子对象。
3. 信号与槽
信号与槽是观察者模式,当控件发现自己的某个事件发生后就发出信号,信号以广播形式发送,谁对该信号感兴趣就调用connect函数将信号与自己的槽函数绑定,只要信号发生就回调槽函数。
connect(sender &Sender::signal, receiver, &Receiver::slot);
(1)关于内存分配
connect 之前,释放 sender 内存,程序运行时出错, 释放 receiver,程序运行不会报错。
connect 之后,释放 sender,程序正常运行,释放receiver,程序正常运行,这说明connect可以通过释放sender或receiver取消。
(2)多次运行相同connect
当信号发出后,会触发多次槽函数。
其他:
(1)只有继承了 QObject类并且添加宏Q_OBJECT才能使用信号槽。
(2)信号无函数体,槽函数可以为任何函数,若槽函数为成员函数,会受访问权限影响
(3)信号槽可以有参数,但槽函数参数应保证能正确接受信号参数。
4. Lambda表达式
C++11中的Lambda表达式用于定义并创建匿名的函数对象。
格式:
[函数对象参数](操作符重载函数参数)mutable或exception ->返回值{函数体}
[]:
标识Lambda的开始,
确定函数对象参数(或者说是函数对象的成员函数),注意只能将 Lambda 可见范围内的变量作为成员函数。
=:
以传值的方式,将Lambda所有可见变量传入,并且为只读属性。
&:
以引用方式。将所有可见变量传入。
this:
只将this指针传入
a:
只将指定变量a以传值方式传入。
&a
只将变量a以引用方式传入
mutable:
以传值方式传入的变量可写。
->返回值类型
当返回类型为void,或只有一处返回,编译器可以推断出返回类型,所以可以省略。
重头开始学Qt——day1的更多相关文章
- 占个坑 未来学qt的时候专用
今天看了一个大佬发了一个上位机图片便向大佬问道 ”上位机是用什么软件做的“大佬抛下一句qt ,在业界内很通用,windows和linux通吃,便让我萌生了一个想法,去学qt.虽说上位机时常听到,但是自 ...
- 从头学Qt Quick(1) --体验快速构建动态效果界面
自2005年Qt4发布以来,Qt已经为成千上万的应用程序提供了框架服务,现在Qt已经基本上支持所有的开发平台了,这里面既包含了桌面.嵌入式领域,也包括了Android.IOS.WP等移动操作平台,甚至 ...
- 零基础学QT编程
吴迪.2010.1 北京航空航天大学出版社 Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...
- 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
先看一下效果图: 实现功能:点击不同的色块可以改变文字的颜色. 实现步骤: 一.创建一个默认的Qt Quick工程: 二.添加文件Cell.qml 这一步主要是为了实现一个自定义的组件,这个组件就是我 ...
- 从头学Qt Quick(2)-- QML语法从一个简单的例子说起
在上一篇文章中,我们对QtQuick做了简单的介绍,体验了使用QML语言构建一个UI的便捷.这里我们简要介绍一下QML的语法. QML将界面分成一些更小的元素,这些元素可以组成一个组件,QML语言描述 ...
- 渣渣学QT
初学QT,自己的一些小总结,错误之处,望大神指点一二: 1,添加资源文件时想应用在界面的背景,但是发现用不了,后来才知道是没有"构建"?应该是要在构建之后才将所添加的资源文件真正的 ...
- 【学QT】 3 - DEBUG集子
1. [root@localhost helloqt]# make g++ -Wl,-rpath,/usr/local/qt/lib -o cfconv .obj/main.o .obj/cfconv ...
- 【学QT】2 - QT/E环境的建立
Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列) QT/E 3.x系列比QT/E 2.x系列有非常大的改进,大大提高了开发进度,不再使用tmake,安装也更简单.但 ...
- 【学QT】1 - QT的安装
1.解压文件在/usr/local/下 #tar zxvf qt-x11-free-3.3.8b.tar.gz -C /usr/local 更改文件夹名称为qt #mv /usr/local/qt-x ...
随机推荐
- NoSQL(Not Only SQL)
Everything has its properties and has relation with each other. All in world can be related to each ...
- DXperience Winforms新版本13.2功能预览
据界面控件厂商 DevExpress 官方最新消息,大家期盼已久的DXperience 13.2终于要面世了.今天在这里提前跟大家提前披露一下DXperience Winforms 13.2的一些精彩 ...
- 算法练习-字符串转换成整数(实现atoi函数)
练习问题来源 https://leetcode.com/problems/string-to-integer-atoi/ https://wizardforcel.gitbooks.io/the-ar ...
- sharepoint国内网站一览表(转发)
中国石油化工集团公司http://www.sinopecgroup.com/Pages/index.aspx () 中国南方航空http://group.csair.com/_layouts/grou ...
- PB导出规定格式DBF文件 dBase 3 格式 222个字段
最近在做一个给卫计委做数据上报的数据接口,接口要求使用奇葩的dBase 3数据库存储上报数据,忙活了几天总算搞好了,使用开发工具为powerbuild 12,222个字段的上报数据表生成DBF文件,写 ...
- Docker cgroup.procs no space left on device
环境:centos6 运行docker 时 错误提示: System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1 ...
- 《反脆弱》:软件业现成的鲁棒性(Robust)换了个说法变成了作者的发明,按作者的理论推导出许多可笑愚蠢的原则来
本书作者名气比较大,写过<黑天鹅><随机漫步的傻瓜>等书,据称专门研究不确定度性.本书是他以前的书的内容的延续. 所谓的反脆弱,其实软件业有现成的名词鲁棒性(Robust)就是 ...
- Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.错误
错误如图示: 1.在php的目录下建立个文件夹tmp,这个有权限的问题,如果是ntfs的分区,就一定要添加evryone的控制权限,否则是没用的.2.在php.ini找到session.save_pa ...
- 2017.10.14 Java的流程控制语句switch&&随机点名器
今日内容介绍 1.流程控制语句switch 2.数组 3.随机点名器案例 ###01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作 ...
- ID3和C4.5、CART
CART连续属性参考C4.5的离散化过程,区别在于CART算法中要以GiniGain最小作为分界点选取标准.是否需要修正?处理过程为: 先把连续属性转换为离散属性再进行处理.虽然本质上属性的取值是连续 ...