目录
1.事件介绍
2.QT事件的产生
3.事件处理函数
3.1鼠标事件
3.2键盘事件
3.3窗口重绘事件
3.4窗口关闭事件
3.5窗口大小变化事件
4. 重写事件处理函数
1.事件介绍
QT 程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。QT 事件的发生和处理 成为程序运行的主线,存在于程序整个生命周期。
常见的 QT 事件类型如下:
- 键盘事件: 按键按下和松开
- 鼠标事件: 鼠标移动,鼠标按键的按下和松开
- 拖放事件: 用鼠标进行拖放
- 滚轮事件: 鼠标滚轮滚动
- 绘屏事件: 重绘屏幕的某些部分
- 定时事件: 定时器到时,比如设定一个定时器,定时器到时,则触发定时事件
- 焦点事件: 键盘焦点移动
- 进入和离开事件: 鼠标移入 widget 之内,或是移出
- 移动事件: widget 的位置改变
- 大小改变事件: widget 的大小改变
- 显示和隐藏事件: widget 显示和隐藏
- 窗口事件: 窗口是否为当前窗口
QT 将系统产生的消息转化为 QT 事件,QT 事件被封装为对象,所有的 QT 事件均继承抽象类 QEvent,用于描述程序内部或外部发生的动作。
2.QT事件的产生
- 用户操作产生事件被操作系统给捕获,比如:键盘按钮,鼠标按键,鼠标滚轮产生对应的事件。
- 操作系统捕获事件放进消息队列中
- QtGUI应用程序检测到相应的事件,从内核中获取事件,并将事件封装为QEvent 分发到相应的QWidget对象。
- 相应的 QWidget 中的 event(QEvent *)进行事件处理会对事件进行处理
- event(QEvent *)会根据事件类型调用不同 的事件处理函数。
- 在事件处理函数中发送 QT 预定义的信号,最终调用信号关联的槽函数
3.事件处理函数
Qt 提供的事件处理器函数都是回调函数,也就是说作为使用者我们只需要指定函数的处理动作,关于函数的调用是不需要操心的,当某个事件被触发,Qt 框架会调用对应的事件处理器函数。
如何查找事件处理函数?
进入帮助文档。
在Protected Function中,只要函数名后缀带有Event都是事件处理函数
3.1鼠标事件
//当当鼠标左键、鼠标右键、鼠标中键被按下,该函数被自动调用
//通过参数可以得到当前按下的是哪个鼠标键
[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event);
//当鼠标左键、鼠标右键、鼠标中键被释放,该函数被自动调用,
//通过参数可以得到当前释放的是哪个鼠标键
[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event);
//鼠标移动事件
//当鼠标移动(也可以按住一个或多个鼠标键移动),该函数被自动调用
//通过参数可以得到在移动过程中哪些鼠标键被按下了。
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event);
//当鼠标双击该函数被调用,通过参数可以得到哪一鼠标键进行双击
[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event);
//当鼠标进入窗口的一瞬间,触发该事件,注意:只在进入的瞬间触发一次该事件
[virtual protected] void QWidget::enterEvent(QEvent *event);
//当鼠标离开窗口的一瞬间,触发该事件,注意:只在离开的瞬间触发一次该事件
[virtual protected] void QWidget::leaveEvent(QEvent *event);
3.2键盘事件
//当键盘上的按键被按下了,该函数被自动调用,通过参数可以得知按下的是哪个键
[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event);
//当键盘上的按键被释放了,该函数被自动调用,通过参数可以得知释放的是哪个键。
[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event);
3.3窗口重绘事件
[virtual protected] void QWidget::paintEvent(QPaintEvent *event);
当窗口刷新时,该窗口会被自动调用。比如:
- 窗口大小变化
- 窗口隐藏了,窗口显示出来
- 调用update()函数
3.4窗口关闭事件
[virtual protected] void QWidget::closeEvent(QCloseEvent *event);
当窗口标题栏的关闭按钮被按下并且在窗口关闭之前该函数被调用,可以通过该函数控制窗口是否被关闭。
3.5窗口大小变化事件
[virtual protected] void QWidget::resizeEvent(QResizeEvent *event);
当窗口的大小发生变化,该函数被调用。
4. 重写事件处理函数
Qt自带事件处理函数都有默认处理动作,如果我们不想使用事件处理函数函数默认动作,我们可以
自定义该事件的处理动作。
步骤:
- 自定义一个窗口类,继承某个窗口类。
- 在自定义窗口类重写事件处理函数即可
示例:
- 窗口大小变化是,高度和宽度的值.
- 窗口移动时,坐标中的值也发生变化。
文章来源:https://www.toymoban.com/news/detail-535156.html
文章来源地址https://www.toymoban.com/news/detail-535156.html
//重写resizeEvent和moveEvent事件
void MainWindow::resizeEvent(QResizeEvent*)
{
geoUpdate();
}
void MainWindow::moveEvent(QMoveEvent*)
{
geoUpdate();
}
void MainWindow::geoUpdate()
{
//获取位置信息
//geometry()函数是QWidet中公共成员函数
//它获取的是窗口的左上标的位置,以及窗口的宽度,高度
QRect rect=geometry();
QString x=QString::number(rect.x());
QString y=QString::number(rect.y());
QString height=QString::number(rect.height());
QString width=QString::number(rect.width());
ui->coordiante_line->setText("( "+x+","+y+" )");
ui->heigth_line->setText(height);
ui->wid_line->setText(width);
}
到了这里,关于【QT】——事件处理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!