Qt学习之十三:事件
2016-09-10 20:25
309 查看
事件驱动: 所谓的“事件驱动”,我们的程序的执行顺序不再是线性的,而是由一个个事件驱动着程序继续执行。没有事件,程序将阻塞在那里,不执行任何代码。如果我们使用组件,我们关心的是信号槽;如果我们自定义组件, 我们关心的是事件。
实例:鼠标点击
EventLabel 继承了 QLabel,覆盖了 mousePressEvent()、 mouseMoveEvent() 和
MouseReleaseEvent() 三个函数。我们并没有添加什么功能,只是在鼠标按下( press)、鼠标移动( move)和鼠标释放( release)的时候,把当前鼠标的坐标值显示在这个 Label 上面。由于 QLabel 是支持 HTML 代码的,因此我们直接使用了 HTML 代码来格式化文字。
QString 的 arg() 函数可以自动替换掉 QString 中出现的占位符。其占位符以 % 开始,后面是占位符的位置,例如 %1, %2 这种。
实例:鼠标点击
class EventLabel:public QLabel { protected: void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); }; void EventLabel::mouseMoveEvent(QMouseEvent *event) { this->setText(QString("<center><h1>Move: (%1,%2)</h1></center>").arg(QString::number(event->x()),QString::number(event->y()))); } void EventLabel::mousePressEvent(QMouseEvent *event) { this->setText(QString("<center><h1>Press: (%1,%2)</h1></center>").arg(QString::number(event->x()),QString::number(event->y()))); } void EventLabel::mouseReleaseEvent(QMouseEvent *event) { QString msg; msg.sprintf("<center><h1>Release: (%d,%d)<h1><center>",event->x(),event->y()); this->setText(msg); }
EventLabel 继承了 QLabel,覆盖了 mousePressEvent()、 mouseMoveEvent() 和
MouseReleaseEvent() 三个函数。我们并没有添加什么功能,只是在鼠标按下( press)、鼠标移动( move)和鼠标释放( release)的时候,把当前鼠标的坐标值显示在这个 Label 上面。由于 QLabel 是支持 HTML 代码的,因此我们直接使用了 HTML 代码来格式化文字。
QString 的 arg() 函数可以自动替换掉 QString 中出现的占位符。其占位符以 % 开始,后面是占位符的位置,例如 %1, %2 这种。
相关文章推荐
- DirectShow中响应事件
- 如何运用onunload事件判断浏览器是刷新还是关闭窗口
- wait for a undo record等待事件
- 解决IE8将“在页面中选中一段文字”误认为是Onclick 事件
- Event事件--用户控件调用父窗体方法
- Caliburn第3部分 事件 参数
- 读jQuery之十(事件模块概述)
- 动态调用事件,事件的方法
- 去掉 AbsListView系 点击事件
- Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法
- 一个灵巧的Delphi多播实事件现方案
- Qt事件处理机制
- 页面元素用JS动态添加的有效事件绑定方式
- jQuery中通过append方法加载的内容事件失去解决方法
- EventBus 粘性事件,源码解析
- PHP响应button的onclick事件
- android连续单击事件实现的两种方案
- js body 设置onmousedown事件响应
- jQuery---键盘事件
- 微博应对突发热点事件的弹性调度实践