• 2884阅读
  • 2回复

[提问]串口信号槽与阵列的一些问题 [复制链接]

上一主题 下一主题
离线harold00124
 

只看楼主 倒序阅读 楼主  发表于: 2016-12-02
是这样的
小弟写了个串口程序,接收的时后触发程序

connect(Rxserialport,SIGNAL(readyRead()),
            this,SLOT(Rxreaddate()));

然后程序会把接收的值按照协议解码成ui可用的值


全局变数
int DataValue[24];
int DataPoint=0;


MainWindow::Rxreaddate()
{

    bool ok;
    int Read_Data[4];
    QString Strcode[8];
    Rx=Rxserialport->readAll();
    int Rxlength=Rx.length();

    for(int i=0;i<Rxlength;i++)
    {
        Strcode=Rx.mid(0+i,1).toHex();
        qDebug()<<"Strcode"<<i<<":"<<Strcode;
    }
    //int Read_Pack_No=Strcode[0].toInt(&ok,16)>>1;
    //int Read_CRC=Strcode[3].toInt(&ok,16)>>1;


    Read_Data[0]=Strcode[1].toInt(&ok,16)>>4;

    Read_Data[1]=(Strcode[1].toInt(&ok,16)&0xF)|(Strcode[2].toInt(&ok,16)>>7);

    Read_Data[2]=(Strcode[2].toInt(&ok,16)&0x7F)>>3;

    Read_Data[3]=((Strcode[2].toInt(&ok,16)&0x6)<<1)|(Strcode[3].toInt(&ok,16)>>6);

    int Value=(Read_Data[0]<<12)|
              (Read_Data[1]<<8)|
              (Read_Data[2]<<4)|
              (Read_Data[3]);
    qDebug()<<"RX"<<Rx;
    qDebug()<<Value;

   DataValue[DataPoint]=Value;    DataPoint+=1;
    if(DataPoint>24){        DataPoint=0;
    }}

小弟想请教一下  今天小弟希望实现计算的值按照顺序放在一个阵列内 int DataValue[24];
然后每当阵列的值有变动的时后再触发一个信号槽到另一个子程序内
比方说这样

void MainWindow::RxDatatoWiget()
{
    ui->Gain_spinBox->setValue(Value[0]);
    ui->Level_spinBox->setValue(Value[1]);
    ..........
    .............
    .................
}

请教一下是否有可行的写法呢? 小弟昨天试了一天都找不到办法自定义阵列信号槽


离线bran_lee

只看该作者 1楼 发表于: 2016-12-02
把修改DataValue的操作放在一个函数里,所有修改都通过函数来操作,然后自己定个信号,怎么发都可以啊,是我没理解吗?
1条评分金钱+10
harold00124 金钱 +10 謝謝提點! 2016-12-02
当你只有锤子时,你看什么都像是钉子!
离线harold00124

只看该作者 2楼 发表于: 2016-12-02
小弟好像被自己導入務區了

原本的想法是先設置全局變數DataValue
然後接收子程序內自行修改

沒有想到用函數去寫信號槽 還一直傻傻地嘗試用connect(this,SIGNAL(DataValue)..................
這種方法讓變數去定義信號槽

謝謝大大點醒我
快速回复
限100 字节
 
上一个 下一个