Qt重构
Qt重构
框架
qt的核心是QApplication函数,在main函数里面调用exec(),实现对事件的监听功能和循环
QObject类是一切之基类,但是不可见(不像其他的GUI类可以看到),提供的是信号与槽,事件处理等逻辑功能
Qwidget类是最基本的可视化控件,所有能看到的控件都要继承它,可以当作小窗体,自定义界面,包含了
mainwindow类是图形化界面的整体,继承了Qwidget类,在它的基础上拓展了菜单栏等很多功能,适合当作主窗口
运行完main函数后,启用了QApplication的监听功能,可以监听检测各种事件,Qwidget类包含了这种事件的虚函数,一旦监听到对应事件就会调用重写后的函数

event函数就是来驱动对应事件的,将事件发给对应的事件函数处理
机制
对象树机制
父对象是根节点,子对象是子节点
new操作符是先分配内存,然后再调用构造函数初始化对象,然后返回对象指针
Q_OBJECT是一个宏,该类经过moc编译后会生成额外的代码来支持信号与槽等功能

构造函数初始化成员列表,先列基类构造函数,在根据声明顺序初始化成员变量,ui在这里是成员指针,指针要初始化防止野指针
Ui_NO_1是一个类,里面是常见的UI组件
格式:
参数:初始化列表(调用构造函数,初始化变量)

注册到对象树最终是靠QObject类的构造函数
在窗口构造函数执行btn=new QPushbutton(“ok”,this);
函数里面的this是父对象,指的是窗口,而QObject函数里面的this指向的是QPushbutton这个类
为什么不直接实例化QPushbutton btn?
因为实例化是在栈上分配的内存,在构造函数完了生命就结束了,一闪就没了,留个空窗口运行
new是在堆上开辟的内存,会一直存在直到父对象死亡或手动结束生命
paintEvent调用时机剖析

1.在首次启动时会进行多次调用初始化(依据:首次cnt_1的值打印的是1 2 3)
2.自动调用更新脏区域,不是全局区域(依据:鼠标滑倒button控件上,cnt_1的值会增加,但是颜色不变红,因为绘图只更新按钮区域,其他区域画笔没那么长,伸不到那么远)
3.手动调用更新全局区域(依据:cnt_1的值是1000颜色也没变,我一点槽函数的update()颜色就变了
在设计UI时,要先把主窗口布局,这样控件才会随着鼠标拖动窗口而改变大小.
其他配件也尽量布局

