Qt 自定义信号与槽 & 事件

一、自定义信号与槽

当某些条件触发时,想自动执行一些代码,这种情况就需要用到自定义信号和槽。

1、信号和槽必须是类的成员

2、自定义信号和槽的类必须继承QObject,由于QObject是所有类的源头,它们都继承了QObject,所以继承任何一个Qt中的类即可

3、在类的开头位置写 Q_Object 不需要分号

​ 注意:此标识符必须在项目构建之前写,如果是后加入的编译时可能出现槽函数、信号找不到

​ 解决方法:删除项目中所有自动生成的文件,然后再使用

​ qmake -project

​ qmake

​ make

4、信号定义在 signals:关键字下面,信号的格式相当于函数声明

5、使用 emit 命令发送信号,并且可以在发送信号时传递参数给槽函数

6、槽函数定义在 private|protected|public slots:关键词下面,可以先声明后定义,也可以直接在头文件中定义7、一个信号可以连接多个槽函数,当该信号发射时会同时触发多个槽函数

8、多个信号可以连接一个槽函数,只要其中一个信号发射就会触发槽函数

二、事件

事件是基于类多态实现的,Qt中的控件类中有一些什么都不做的虚函数,当事件发生时,会自动调用这些虚函数。
这些会被自动调用的虚函数,被称为事件函数,触发这些虚函数的行为或操作称为事件

常用事件:

// 鼠标按下事件
void mousePressEvent(QMouseEvent *);
// 鼠标弹起事件
void mouseReleaseEvent(QMouseEvent *);
// 鼠标双击事件
void mouseDoubleClickEvent(QMouseEvent *);
// 鼠标移动
void mouseMoveEvent(QMouseEvent *);
// 鼠标移入
void enterEvent(QEvent *);
// 鼠标移出
void leaveEvent(QEvent *);
QMouseEvent的button成员函数,可以获取到触发事件的鼠标按钮。

常用键盘事件:

// 键盘按下事件(方向键无效)
void keyPressEvent(QKeyEvent *);
// 键盘弹起事件
void keyReleaseEvent(QKeyEvent *);
QKeyEvent的key成员函数,可以获取按键的键值(整数),无法区别大小写。
QKeyEvent的Text成员函数,可以区分大小写,但方向键无字符。

焦点事件:

注意:只有可以编辑的控件才有该事件
// 获得焦点
void focusInEvent(QFocusEvent *);
// 失去焦点
void focusOutEvent(QFocusEvent *);

窗口事件:

// 窗口显示事件
virtual void paintEvent(QPaintEvent *);
// 窗口移动
virtual void moveEvent(QMoveEvent *);
// 大小改变事件
virtual void resizeEvent(QResizeEvent *);
// 窗口关闭事件
virtual void closeEvent(QCloseEvent *);

你可能感兴趣的:(Qt界面编程学习笔记,qt)