文章目录

我们在构造中写入label,可以用对象树方式创建。栈的方式不能进行文本构造,因为调用析构
这里不用对象树delete,不用担心内存泄漏,因为他在对象树上
这样的好处可以统一释放所有的对象。
不能Lable label 之间构造,因为调用了析构
乱码
乱码是编码方式不匹配
表示汉字的字符集有很多,不统一,
最常用有两种方式
1GBK---2个字节表示一个汉字
2utf8-----2-4个字节,一般是三个字节

这里是3,linux默认使用utf-8
字符串和控制台的编码方式不一样
这里可以使用Qstring进行处理,打印日志可以用qDebug

推荐用new方法堆的方式创建对象
统一释放对象,构造函数中指定父对象,这样才会挂到对象树上
没挂对象树要手动释放

按钮方式实现
使用编辑框来完成hello world


代码方式

按钮和信号槽
点击可以执行处理函数


指定的obectName的名字是唯一的,这个名字就是buttton名字
命名
用下划线划分不同单词
unordered_map
priority_queue
大写字母分隔
studentCount---小驼峰--变量/函数
QApplication---大驼峰---类命名
查询文档
光标放到文字上面直接按f1
也有安装的QTAssistant和linux中man 查手册差不多

QT的坐标体系
我们从小都学过平面直角坐标系,QT类似但是不一样
(0,0)处就是屏幕的左上角
子控件是基于父控件的坐标点来进行操作的,没有父元素的在桌面

move函数可以移动控件的位置move的参数是像素
move(200,300)就是水平移动200,垂直移动300.
this.move()也可以移动wegit
信号和槽
linux的信号是系统内部的通知的机制,进程之间的通信方式
信号源:谁发的信号
信号的类型:哪种类别的信号
信号的处理方式:注册信号的处理函数,触发时候自动调用
QT中的信号:
所谓的槽函数是回调函数,一个信号和一个槽关联起来
37


QWidget(控件)有许多子类QPushButton.QlineEdit...
QObject 是QWidget的类
connect

有五个参数,最后一个有默认
前四个参数分别是信号哪个空间发出,信号类型,哪个对象负责处理,该怎么处理
wiget->Qwiget->QObject
信号就是某些类它提供的成员函数

上面是solt函数,下面是信号
第二个参数必须是第一个对象的函数或父类的函数
同理第三个参数和第一个一样
第四个参数原理和第二个一样,要是slot函数
至于何种类有何种槽函数和操作函数就要查文档

也可以查看父类,和父父类
QAbstract

这里就是父类QAbstrct的信号
这里char 就是char,&函数()有不同类型,比如void ( )(), bool (*)()
在c++中不允许的,原本的connet要使用signal和slot宏来转换成char *()类型
QT5之后进行简化了,connect进行了重载,变成了泛型参数

这里带入参数检查的功能
自定义槽
我们如果不想用类中的方法,那么我们可以自定义槽函数
那么我们要在wegit类里自定义一个槽方法

以前必须放在public slots里,现在可以归结到一个public里
ui->pushbutton可以连接自己QTdesiner设计的按钮


这里就有clicked,点击可以直接生成定义和实现
这种实现方法是通过函数名触发的,可以跟connect效果一样,QT自动把信号和槽建立联系。
如果声明修改,无法匹配之后会提示:

自定义信号
槽函数的定义很常见
自定义信号很少见,QT内置的信号已经可以覆盖大部分场景
信号是一个特殊的函数
程序员只要写出声明,编译过程中定义自动生成,程序员不能干预
1返回值必须是void
2没有参数也可以,支持重载
要在类中signals: 编写,和槽函数不同

但是我们连接之后要发出信号用emit 信号函数();
我们可以在构造中emit 也可以在某一个槽函数中emit








