阳江美容招聘信息在哪里可以找到?
摘要:广告网站建设方案,阳江招聘网最新招聘信息网美容框,wordpress迁服务器,怎样登陆wordpress文章目录 事件重写事件事件分发 事件 事件(event)是由系统或Qt本身在
广告网站建设方案,阳江招聘网最新招聘信息网美容框,wordpress迁服务器,怎样登陆wordpress文章目录 事件重写事件事件分发 事件
事件#xff08;event#xff09;是由系统或Qt本身在不同的时刻发出的。比如#xff0c;当用户按下鼠标#xff0c;敲下键盘#xff0c;或窗口需要重新绘制的时候#xff0c;都会发出一个相应的事件。一些事件是在对用户操作做出响应… 文章目录 事件重写事件事件分发 事件
事件event是由系统或Qt本身在不同的时刻发出的。比如当用户按下鼠标敲下键盘或窗口需要重新绘制的时候都会发出一个相应的事件。一些事件是在对用户操作做出响应的时候发出如键盘事件等另一些事件则是由系统自动发出如定时器事件在我们之前写的游戏壳子中用的就是这类事件。
Qt的事件和信号槽很容易混淆事件其实也就是所谓的事件驱动signal由具体对象发出然后会马上交给connect函数连接的slot进行处理。而对于事件Qt使用一个**事件队列windowSystemEventQueue**对所有发出的事件进行维护当新的事件产生时会被追加到事件队列的尾部前一个事件完成后取出后面的事件进行处理。但是必要的时候Qt的事件也是可以不进入事件队列而是直接处理的。
如果我们使用组件我们关心的是信号槽如果我们自定义组件我们关心的是事件。
重写事件
一般我们重写某个组件的事件需要自定义类继承对应的组件类重写感兴趣的事件。
新建子类 然后在代码创建成功后将父类改为QLable。 想知道有哪些事件我们需要转到父类中模糊搜索event事件多为虚函数供我们重写定义自己的实现规则。 我们关注鼠标相关的事件分别将mousePressEvent,mouseMoveEvent,mouseReleaseEvent三个虚函数在qt中表现为斜体重写。
可以在函数的声明后面加上宏Q_DECL_OVERRIDE或关键字override进行校验当前的虚函数是否为重写父类的如果不是则会报错。
在重写的三个虚函数中我们需要跟踪鼠标左键在Lable组件的状态。
声明
public:void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;定义
void MyLabel::mousePressEvent(QMouseEvent *ev){if(ev-button() Qt::LeftButton){ //如果按下的键是鼠标左键this-setText(QString(鼠标左键按下%1,%2).arg(ev-x()).arg(ev-y()));}
}//button触发当前事件的按钮
//buttons触发当前事件时有哪些按键是按下的
void MyLabel::mouseMoveEvent(QMouseEvent *ev){if(ev-buttons() Qt::LeftButton|Qt::RightButton){ //鼠标左键和右键同时按下且移动this-setText(QString(鼠标左键合右键同时按下且移动));}else if(ev-buttons() Qt::NoButton){ //鼠标移动没有按下任何的按键this-setText(QString(鼠标移动%1,%2).arg(ev-x()).arg(ev-y()));}
}void MyLabel::mouseReleaseEvent(QMouseEvent *ev){if(ev-button() Qt::RightButton){ //鼠标右键抬起this-setText(QString(鼠标右键抬起%1,%2).arg(ev-x()).arg(ev-y()));}
}自定义的MyLabel类与主窗口上的Label组件绑定。 然后我们测试经过测试我们发现基本都能通过唯有一个当鼠标只移动没按下时没有反应这是因为我们在他未按下时没有对他进行追踪所以我们在构造函数中去添加一个函数。 这样就可以了 事件分发
事件对象创建完毕后Qt将这个事件传递给QObject::event()函数event()函数主要用于事件的分发一般情况下并不直接处理事件而是将这些事件按照他们不同的类型分发给不同的事件处理器event handler。
如果想在事件分发之前做一些额外的操作或屏蔽掉某些事件我们也可以重写event()函数。通过event-type()来确定事件的类型。
