1.窗口show()的前后顺序不一样,显示会不一样
2.没有父对象的窗口,叫主窗口
3.Qobject connect(要发送消息的对象, 要发送的信号, 接收信号的对象, 接收信号的处理方式);
前两个参数称为对象, 后两个参数称为槽
4.输入框
enum EchoMode { Normal, NoEcho, Password, PasswordEchoOnEdit };
Normal:正常输入模式
NoEcho:输入的时候不显示
Password:密码方式显示
PasswordEchoOnEdit:输入的时候为明文,切换焦点以后就变为密码模式
5.
button.setGeometry(30, 30, 100, 30);
这个按钮坐标的位置为(30,30),宽度为100,高度为30
6.
窗体类中有一个setGeometry方法可以设置窗体的位置。
控件也是窗体,控件也可以通过这个函数设置自己的位置
button.setGeometry(30, 30, 100, 30);
这个按钮坐标的位置为(30,30),宽度为100,高度为30
7.
为了不写很多槽函数,可以使用C++的lambda表达式,方法在工程管理文件中增加
CONFIG += C++11
使用的时候相当于将槽函数写成一个匿名函数。
8.消息处理函数是虚函数,使用要进行重载
9.消息处理流程:
QApplication先得到 -> 具体的处理的处理窗口 ::event() ->event()函数根据消息类型调用具体的虚函数
我们可以做:1.可以重载具体的虚函数来实现对消息的响应。
2.可以重载event()函数用来处理或者截断消息
10.鼠标的消息处理
同一时刻只有一个窗口处理鼠标事件,在构造函数中定义一个按钮,查看鼠标移动时坐标的变化。
鼠标停在谁上面就是谁处理。
11.在槽函数中可以通过sender()函数来获取消息的发送者
因为有可能多个Object的signal会连接到同一个signal(例如多个Button可能会connect到一个slot函数onClick()),因此这是就需要判断到底是哪个Object emit了这个signal,根据sender的不同来进行不同的处理
12.消息在传递过程中,从一个对象传递到另一个对象,然后又接着往下传递,在传递的过程中消息带的参数都是QEvent *
Qt 的事件对象有两个函数:accept()和ignore()。正如它们的名字一样,前者用来告诉 Qt,这个类的事件处理函数想要处理这个事件;后者则告诉 Qt,这个类的事件处理函数不想要处理这个事件。
13.常用窗体消息
窗口关闭:closeEvent
窗口显示:showEvent
窗口隐藏:hideEvent
窗口重回:paintEvent
14.notify函数是QApplication的成员函数,窗口会向应用程序通知正在处理的消息,通过这个函数,应用程序可以知道各个窗口当前要处理的消息。可以派生一个QApplication类,重载这个函数,获取程序当前正在处理的消息。
15.从1000开始到65535是用户自定义消息的范围,理论上用户可以自定义64535个消息。
16.
QApplication有postEvent和sendEvent用于发送消息
发送消息:
app.postEvent(&w, new QEvent(QEvent::MyUser)); |
app.sendEvent(&w, new QEvent(QEvent::MyUser)); |
消息可以发送给任何QObject对象,post和send发送消息是有区别的,post是立马返回,是非阻塞的,send必须要等消息发完才返回,是阻塞的。
17.控件的父类都是QWidget
18.按钮按下做什么事情
一种办法 可以定义一个clicked虚函数
另一种办法 用信号
19.
总结:
一个类:QObject
三个宏:Q_OBJECT, SIGNAL、SLOT
三个保留字:signals、slots、emit