利用QTimer实现连续发送指令/按钮实时控制

目录

前言

1.引用QTimer库

2.基本指令

 3.实现定时发送功能

4.按钮实时控制方向


前言

因为是随做随找随学,所以想到什么,做到什么就讲什么,如果有别的需要可以根据下文类推。这次是使用QTimer,应该算是挺常用的一个库了,用法也很多。

这次用到的原因是手册要求控制指令必须要以0.1s以内的间隔发出,以达到实时控制的目的。另外还有一个功能,实时显示所在坐标。其实说白了都一样,就是短时间内向下位机连续发送指令。


1.引用QTimer库

这里不用太多说,.h文件中里添加头文件。(这个库应该是含在Qt core里面的,所以应该不用手动添加Qt Modules了)

#include <QTimer>

2.基本指令

QTimer timer; //.h文件里写

两种使用方法,效果是一样的。数字的地方是间隔,单位是毫秒。1000就是1秒,这里50就是0.05秒。手册要求0.1秒以内就行,如果卡在0.1,秒的话,因为传输和连接这些问题,系统运行会一顿一顿的。(说白了就是指令没连上)

timer.setInterval(50);
timer.start();
timer.start(50);

当然具体设置多少要看实际需求,太慢不满足条件,太快的话小心把下位机爆了。

 当然别忘了停止计时器。

timer.stop();

 3.实现定时发送功能

如果你希望系统启动的时候就启动计时器,开始实现计时器绑定的功能,可以直接写在主类里。

GetAxis::GetAxis(QObject *parent)
	: QObject(parent)
{
	timer.setInterval(100);
	connect(&计时器名称, &QTimer::timeout, this, &类名::槽函数方法名);
	timer.start();
}

timer的触发实际上是通过自带的timeout,假如我设定为100毫秒。那么就是每0.1秒触发一次timeout,然后开始下一次计时。当触发timeout时,我们把这个作为信号,去建立与槽函数的连接,从而实现自动的连续发送。

4.按钮实时控制方向

实际上最开始使用QTimer不是用于这种指令发送,而是用于QButton的持续按下,从而实现实时移动。下面来讲一下这个。

首先UI上创建一个QButton控件,因为是持续按下和抬起,所以用到的信号是pressed()和released()。同时创建两种方法,一个timerStart用于按下按钮时开启定时器,一个timerStop用于抬起按钮时关闭定时器。

connect(ui.UpBtn, SIGNAL(pressed()), 类名, SLOT(timerStart()));
connect(ui.UpBtn, SIGNAL(released()), 类名, SLOT(timerStop()));

timerStart函数:

void JogControl::timerStart() {
	timer.setInterval(50);

    //获取发送信号控件
	QPushButton* senderBtn = qobject_cast<QPushButton*>(sender());

	timer.start();

    //判断控件发出指令
	if (senderBtn->objectName() == "UpBtn") {
		connect(&timer, &QTimer::timeout, this, &JogControl::upControl);
	}
}

如果是一个按钮那就无所谓了,这里因为实现的是一个四方向控制,都要引入到timerStart函数中。所以增加了一步判断发送信号的sender,根据sender的名称,再去使用不同的功能。 

timerStop函数: 

void JogControl::timerStop() {
	timer.stop();
	disconnect(&timer, &QTimer::timeout, this, &JogControl::upControl);
	disconnect(&timer, &QTimer::timeout, this, &JogControl::downControl);
	disconnect(&timer, &QTimer::timeout, this, &JogControl::leftControl);
	disconnect(&timer, &QTimer::timeout, this, &JogControl::rightControl);
}

这里还是注意一下哈,需要手动断开连接。 不然你会发现你按完的按钮还在跟着别的按钮一起触发,我这里之前就犯了这个错。

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值