以前学过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的更多相关文章

  1. 占个坑 未来学qt的时候专用

    今天看了一个大佬发了一个上位机图片便向大佬问道 ”上位机是用什么软件做的“大佬抛下一句qt ,在业界内很通用,windows和linux通吃,便让我萌生了一个想法,去学qt.虽说上位机时常听到,但是自 ...

  2. 从头学Qt Quick(1) --体验快速构建动态效果界面

    自2005年Qt4发布以来,Qt已经为成千上万的应用程序提供了框架服务,现在Qt已经基本上支持所有的开发平台了,这里面既包含了桌面.嵌入式领域,也包括了Android.IOS.WP等移动操作平台,甚至 ...

  3. 零基础学QT编程

    吴迪.2010.1 北京航空航天大学出版社   Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...

  4. 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器

    先看一下效果图: 实现功能:点击不同的色块可以改变文字的颜色. 实现步骤: 一.创建一个默认的Qt Quick工程: 二.添加文件Cell.qml 这一步主要是为了实现一个自定义的组件,这个组件就是我 ...

  5. 从头学Qt Quick(2)-- QML语法从一个简单的例子说起

    在上一篇文章中,我们对QtQuick做了简单的介绍,体验了使用QML语言构建一个UI的便捷.这里我们简要介绍一下QML的语法. QML将界面分成一些更小的元素,这些元素可以组成一个组件,QML语言描述 ...

  6. 渣渣学QT

    初学QT,自己的一些小总结,错误之处,望大神指点一二: 1,添加资源文件时想应用在界面的背景,但是发现用不了,后来才知道是没有"构建"?应该是要在构建之后才将所添加的资源文件真正的 ...

  7. 【学QT】 3 - DEBUG集子

    1. [root@localhost helloqt]# make g++ -Wl,-rpath,/usr/local/qt/lib -o cfconv .obj/main.o .obj/cfconv ...

  8. 【学QT】2 - QT/E环境的建立

    Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列)          QT/E 3.x系列比QT/E 2.x系列有非常大的改进,大大提高了开发进度,不再使用tmake,安装也更简单.但 ...

  9. 【学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 ...

随机推荐

  1. NoSQL(Not Only SQL)

    Everything has its properties and has relation with each other. All in world can be related to each ...

  2. DXperience Winforms新版本13.2功能预览

    据界面控件厂商 DevExpress 官方最新消息,大家期盼已久的DXperience 13.2终于要面世了.今天在这里提前跟大家提前披露一下DXperience Winforms 13.2的一些精彩 ...

  3. 算法练习-字符串转换成整数(实现atoi函数)

    练习问题来源 https://leetcode.com/problems/string-to-integer-atoi/ https://wizardforcel.gitbooks.io/the-ar ...

  4. sharepoint国内网站一览表(转发)

    中国石油化工集团公司http://www.sinopecgroup.com/Pages/index.aspx () 中国南方航空http://group.csair.com/_layouts/grou ...

  5. PB导出规定格式DBF文件 dBase 3 格式 222个字段

    最近在做一个给卫计委做数据上报的数据接口,接口要求使用奇葩的dBase 3数据库存储上报数据,忙活了几天总算搞好了,使用开发工具为powerbuild 12,222个字段的上报数据表生成DBF文件,写 ...

  6. Docker cgroup.procs no space left on device

    环境:centos6 运行docker 时 错误提示: System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1 ...

  7. 《反脆弱》:软件业现成的鲁棒性(Robust)换了个说法变成了作者的发明,按作者的理论推导出许多可笑愚蠢的原则来

    本书作者名气比较大,写过<黑天鹅><随机漫步的傻瓜>等书,据称专门研究不确定度性.本书是他以前的书的内容的延续. 所谓的反脆弱,其实软件业有现成的名词鲁棒性(Robust)就是 ...

  8. 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 ...

  9. 2017.10.14 Java的流程控制语句switch&&随机点名器

    今日内容介绍 1.流程控制语句switch 2.数组 3.随机点名器案例 ###01switch语句解构     * A:switch语句解构       * a:switch只能针对某个表达式的值作 ...

  10. ID3和C4.5、CART

    CART连续属性参考C4.5的离散化过程,区别在于CART算法中要以GiniGain最小作为分界点选取标准.是否需要修正?处理过程为: 先把连续属性转换为离散属性再进行处理.虽然本质上属性的取值是连续 ...