Qt学习记录Demo_1

本文介绍了Qt框架的基础知识,包括快捷键、Main函数、常用控件API和对象树管理。讲解了控件创建、显示中文、信号与槽机制,以及Qt对象的生命周期。特别强调了信号与槽的连接方式,以及如何使用connect函数进行事件绑定。还提到了Lambda表达式在Qt中的应用,并概述了Qt程序的基本结构。此外,文章还提及了Qt4与Qt5中connect函数的区别和使用注意事项。
摘要由CSDN通过智能技术生成

必备基础:

  1. 快捷键:
  2. Ctrl+R运行 Ctrl+i自动对齐 Ctrl+

Main函数:

       Qapplication a,只有一个。

       Widget,窗口实例化对象

       W.show()显示窗口。

       A.exec()进入消息循环。

3 常用的控件API:

       QpushButton *btn=new Qpushbutton(构造函数,可以设置参数text

,parent等)

       Setparent()依赖窗口

       Settext() move() resize() setwindowtitle() setfixedsize()固定大小

显示中文问题:工具-选项—文本编辑器-行为-默认编码-设置位utf-8

对象数学习:

       当你创建一个Qobject对象(或者派生),或创建一个表children(),将自己的子对象放进去。当父类对象被析构的时候,其children表里的子对象也会被优先析构。(不用管释放问题了)其实就是对象树。一定程度上减轻了      内存回收机制。

       虽然这个功能很好,但是也会带来一些问题。我们最好在构造的时候就指定parent对象,这样可以减少很多问题。

小技术:#include《Qdebug》 qdebug《《“information”可以输出调试信息。

坐标系与MFC一样左上角为原点。

信号和槽的概念:

       将一系列事件联系起来:用connect(需要参数)

  1. 信号的发送者 2.发送的信号 3.信号的接受者 4.信号处理 (槽函数)

用信号将事件联系起来。

       本来这几件事是没有关联的,独立的;通过connect()将他们联系(耦合)联系起来;

       信号为signals

关联函数Connect:

       一个槽可以绑定多个信号,一个信号也可以绑定多个槽;

       但是信号与槽的参数必须一致;

Connect函数如何写 :connect(对象,&对象::signals,对象指针*,槽函数slots)

自定义信号与自定义slots槽:

       需求:Teacher类 student类下课后老师触发信号,学生下课

Teacher:public Qobject

       默认生成一个写自定义信号的位置:即类里的signals:下

signals://自定义信号写在signals下:

    //是函数的形式,不需要返回值,只需声明不需要实现。

//可以有参数,或者重载。

//关于槽函数:早期的qt必须要将槽函数写到public slots:下但是现在可以写到public下或者全局函数

    //返回值void 需要声明与实现;

    //可以有参数,可以重载

事件的触发:

       信息发送emit 前缀例如 emit 对象->signals函数();

重载信息与槽:

       信号所带的参数类型和槽函数的参数类型要一一对应。如果信号不带参数,那么槽函数的参数也要为空,就像connect(thread, SIGNAL(started()), work, SLOT(first()));started()信号与first()槽函数的参数都为空。但是如果二者的参数类型不一样,该如何处理了?

可以增加第三个函数来传递这个信息

       重载信息和曹以后,发现Connect函数报错,无法匹配到对应的函数,因为无法区分重载对吧;

所以Qt用到了一个技术,函数指针,也可以用函数指针数组,在指定函数指针的时候需要标注成员函数的作用域,因为是成员函数的缘故。

小知识:qDEBUG()中,输入char*没引号,输出QString会自动添加引号;

       所以QString.touft8可以先转成qbyteArray再转成Char*用QByteArray的data()

       通过查它的成员函数,观察其成员函数的返回值找的对应的函数;

为信息的触发绑定控件:

Connect(控件对象,控件对象信号引用,接受者,处理函数)

信号与信号连接:

       依然使用connect()函数,可以将两个对象的两种信号关联起来用函数名

       需要注意的是如果你的信号参数不完全一样,将无法连接两个信号。

对于信号的补充:

       信号和槽的参数不是一定要相同的,信号的参数可以多于槽函数的参数,但是信号的类型一定要一样。

可以了解一下老版本的Qtconnect()其中的信号要这么写SIGNAL(信号名()) 其中的槽函数这么写 Slot(槽函数名())

Qt4的缺点是没法检测参数类型,即不能直观的看出信号与槽函数的参数是否有差别

所以很多时候,Qt程序会在信号与槽函数绑定的时候出错。

断开信号:

如何断开信号呢?disconnect()参数完全一样

Lambda表达式:

       用于创建定义匿名的函数,以简化编程工作

Lambda表达式的形式:

 在Qt4以前需要在pro文件里面加入

       Config +=C++11

而之后则不需要这一步操作。

       [capture](paraments)mutable->return-type

{

       statement

}     

其中[]是Lambda表达式的开始标志,[]里面可以有参数:

  1. 空,表示没有使用参数
  2. =,表示可以使用Lambda表达式的局部作用域中的所有可见的局部变量,包括Lambda在所在类的this,并且是以值传递的形式(与引用形式互斥)
  3. &,与=符号的作用类似,但是是以引用传递方式
  4. This,函数体内可以使用lambda所在类的成员变量

Qt框架的基本印象:

       最外层的是pro文件即project;将各种文件联系起来,起到统筹全局的作用是统帅。

旗下各种文件分为:

       Headers文件 与source文件source文件里面放着各种的Cpp文件是headers文件的方法实现。

Cpp文件中主要有main.cpp 和各种Qobject派生类的实现为主;

Main。Cpp中程序的入口组成:

       创建程序Qappliction-》创建程序窗口-》窗口显示-》进入消息循环。

       相对于MFC appliction对象不是全局的,与mainwindow也没什么联系。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值