Qt专栏之事件初识(十三)

一、事件QEvent是个啥?

通过专栏的上篇《信号与槽》初步了解了信号槽的机制,本质上信号与槽属于事件,信号是信号事件,而槽对应的则是进行处理的回调函数

事件由系统或者Qt本身发出。例如当用户按下鼠标、敲下键盘、定时器计时等情况,都会发出一个相应的事件。然后可直接在对应的事件处理函数中进行处理。

类比于信号与槽的机制就是事件本身是信号,事件处理函数类比于槽函数来理解

常用的事件(向右滑动➡️)对应的事件处理函数
键盘按下事件keyPressEvent()
键盘释放事件keyReleaseEvent()
鼠标按下事件mousePressEvent()
鼠标释放事件mouseReleaseEvent()
定时器事件timerEvent()
绘图事件paintEvent()

事件处理函数都是虚函数,已在基类中声明,可直接在具体的派生类中覆盖重写。

二、定时器事件 QTimerEvent

我们启动一个定时器计时,然后在对应的事件处理函数中进行处理:

/*注意头文件*/
#include < QTimer >
/*启动定时器*/    
startTimer(1000);//参数间隔,单位ms
/*
可以通过startTimer的返回值timerId来开启多个定时器进行区分应用;
当定时器计数到时,如上到1000ms后就会类似产生一个中断,然后去执行我们在派生类中重新覆写的事件处理函数timerEvent
*/

/*事件处理函数*/
void MyWidget::timerEvent(QTimerEvent *ev)
{
	/*定时器到时后自动触发执行此处代码*/    
}

当需要启动多个定时器时,推荐多开方式:

/*new出来的定时器对象在堆区,人为可控*/
QTimer * timer1 = new QTimer(this);
QTimer * timer2 = new QTimer(this);
timer1->start(500);//500ms间隔启动定时器
connect(timer1,&QTimer::timeout,[=](){
//laber每隔0.5秒+1
ui->laber->setText(QString::number(num++));
} );
//点击一个按钮,实现停止定时器
connect(ui->btn,&QPushbutton::clicked,[=](){
timer1—>stop();//再启动就是start()
};

三、绘图事件

贪吃蛇项目中还有使用到的事件就是绘图事件:

/*相关的有画家QPainter、画笔QPen、笔刷QBrush(也对应头文件)*/
void paintEvent(QPaintEvent *)
{
	/*触发条件:
	1. 自动触发: 窗口初次显示、窗口部件调整大小、窗口遮挡;
	2. 人为触发:调用QWidget::update();或QWidget::repaint();
	通过触发条件,跳转到paintEvent绘图事件函数中进行处理
	*/    
}

Qt的绘图系统实际上是使用QPainter在QPainterDevice上进行绘制,而对于QPainterDevice来说,Qt提供了四个这样的类:

  • QPixmap
  • QBitmap
  • QImage
  • QPicture

img

img
分享微信公众号『设计至纯』,查看更多原创内容,O(∩_∩)O一键三连、分享、收藏、点赞、支持。 ^ o ^ 您的点赞、评论和关注,是小小编继续创作的不懈动力。 😀

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值