QT事件处理,鼠标事件,按键键盘事件,定时器,进度条。

8 篇文章 0 订阅
2 篇文章 0 订阅

//今天看了书上的一堆的理论知识,怎么说呢?我可能更喜欢实践,但是,没有理论,就没有实践,那叫瞎搞。


----------------------------------------------------------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------


那么让我们开始吧:


首先让我们来看看我们要重写的一些函数:

protected:        
///1按键
	/*当用户按下按键产生的一个事实*/
	void keyPressEvent(QKeyEvent *event);

	/*当用户按键抬起触发的一个事件,如果一直按住会一直触发这个事件*/
	void keyReleaseEvent(QKeyEvent *event);

	///2定时器
	/*好像是QObject自带的,*/
	void timerEvent(QTimerEvent *event);

	//3按控件的键事件过滤
	/**这个东西我认为可能是个鸡肋,但是存在即有理*/
	bool eventFilter(QObject * obj, QEvent * event);

	//4鼠标事件
	/*鼠标按下事件*/
	void mousePressEvent(QMouseEvent *event);

	/*鼠标抬起事件*/
	void mouseReleaseEvent(QMouseEvent * event);

	/*鼠标双击事件*/
	void mouseDoubleClickEvent(QMouseEvent * event);


我们可以看到我们重写了7个事件,上面代码已经写得很清楚了,就不做多的解释,如果你需要重写其他的请参考官方文档


注意不要把projected:这句给漏了。因为这几个函数都是基类里面的,重写的是基类里面的虚函数


那么让我们来看看具体实现吧。第一个具体实现是按键按下事件

void MultipleDocument::keyPressEvent(QKeyEvent *event){
	if (event->key() == Qt::Key_Space)
	{
		QMessageBox::information(this, tr("Home"), tr("kkkkk"));
		return;
	}
}

这里实现的是按空格键弹出一个QMessageBox弹窗跟C#的MessageBox差不多


下面实现的是按键抬起如果一直按住一直触发事件

void MultipleDocument::keyReleaseEvent(QKeyEvent *event){
	if (event->key() == Qt::Key_Space)
	{
		QMessageBox::information(this, tr("Home"), tr("kkkkk"));
		return;
	}
}
我的编译器一直按住,他会一直触发这个弹窗,


下面的实现的是定时器,这是每个继承QObject的控件都有这个虚函数:

myTimerId= startTimer(1000);
这段代码的意思是 开始一个定时器。并返回一个 定时器的标识,也就是windows编程的 句柄,1000代表的意思的每隔 1000毫秒执行一次


我们来看看定时器的具体实现:

void MultipleDocument::timerEvent(QTimerEvent *event){
	if (event->timerId()==myTimerId)
	{ 
		killTimer(myTimerId);  
	}
	else{
		QWidget::timerEvent(event);
	}
}
如果定时器的标识是这个标识,那就就执行那个事件,如果不是就传递到下一个定时事件, killTimer的意思是结束这个标识的定时器


鼠标事件,鼠标按下鼠标释放鼠标移动,事件介绍:

void MultipleDocument::mousePressEvent(QMouseEvent *event){
	qDebug() << QString::fromLocal8Bit("按下:") << event->x();
}
void MultipleDocument::mouseReleaseEvent(QMouseEvent * event){
	qDebug() << QString::fromLocal8Bit("释放") << event->x();
}
void MultipleDocument::mouseDoubleClickEvent(QMouseEvent * event){
	qDebug() << QString::fromLocal8Bit("双击") << event->x();
}


下面再来一张鼠标事件的控制台 配图


注意双击的时候,第一点击会产生一个按下,释放事件,

----------------------------------------------------------------------------------------华丽的结束县-------------------------------------------------------------------------

-------------------------

----------------

书上的理论知识太多,需要自己动手丰衣足食



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路随云00000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值