1. 问题需求:
向电机发指令s r0x2f 1666666用以设置电机的转速为1000。
s r0x2f 1666666 | 设置速度为 1000RPM |
2. 办法解决:
利用串口发送s r0x2f +速度;
获取控件值类型事件
void on_spinboxSpeed_valueChanged(int value);
void MotorDebug::on_btnSendSpeed_clicked()
{
QString buf = "s r0x2f ";
QString str = ui->spinboxSpeed->text();
int num = str.toInt();
int speed = num*1667;
QString Strspeed = QString::number(speed);
buf.append(Strspeed);
char *temp=buf.toLocal8Bit().data();
currentPort->write(temp);
}
3. 代码讲解:
第一步:首先定义一个QString 类型变量存放字符串:"s r0x2f "
第二步:其次获取控件的文本数值:QString str = ui->spinboxSpeed->text();
第三步:将获取后的文本数值转换为Int型,目的是为了做系数相乘的作用。int num = str.toInt();
乘以系数,这样操作的时候就可以直观看到转速,和实际发送的指令了;int speed =
num*1667;
第四步:建立一个QString类型的变量StrSpeed将,QString::number是将数数字(整数、浮点数、有符号、无符号等)转换为QString类型,常用于UI数据显示。
QString Strspeed = QString::number(speed);
第五步:进行拼接形成完整字符串buf.append(Strspeed);
第六步:toLocal8Bit()是将QString以自己正确的编码方式读取并转换成编译器编码方式的字节流,char *temp=buf.toLocal8Bit().data();
第七步:currentPort->write(temp);将数据以串口方式发送。
4. 知识点拓展QString::number()
QString::number是将数数字(整数、浮点数、有符号、无符号等)转换为QString类型,常用于UI数据显示。
4.1 QString::number 整数转换
int a = 20;
uint b =255;
QString::number(a);//20
QString::number(a,10);//20
QString::number(b);//255
QString::number(b,16);//ff
QString::number(b,16).toUpper();//FF
4.2 QString::number 浮点数转换
float a = 1.234;
QString::number(a,‘f’, 2); //1.23
5. 知识点拓展把QString转换为double类型
QString str="123.45";
double c = str.toDouble(); //val=123.45
float d = str.toFloat(); //d=123.45
6. Qstring 转换char*问题
QString qstr("hello,word");
const char *p = qstr.toLocal8Bit().data();