2

我很擅长编程,但对 c++/qt 的世界很陌生。

我一直在修改 qwt 库中的示波器示例,以使用 QtExtSerialPort 库从 arduino 板读取输入。(是的,我知道 QtSerial,但是当我发现时,我对实现有点太远了)

arduino 将值写入串行端口,一行一个数字,如

1.23
2.33
4.56
2.12
0.32

等等。当 PC 读取数据时,它以块的形式进入,所以在一次读取中,我可能会得到类似的东西

3
2.33
4

然后下次

.56
2. 

等等。

在阅读器线程的头文件中,我定义了一个

QString buffer;

然后在阅读时我正在使用这个功能:

double SamplingThread::value( double timeStamp ) const
{
  double v;
  QByteArray inpt;
  int a = port->bytesAvailable();
  inpt.resize(a);
  port->read(inpt.data(), inpt.size());
  QString strng=buffer+QString::fromAscii(inpt); 
  // This concatenates what is left over since last time to what is read now:
  int j=strng.indexOf("\n");
  if(j>-1){
  // if a newline, ie the first number is complete 
    QString s=strng.left(j-1);
    v=s.toFloat();
    s=strng.mid(j+1,-1); // What is to be saved to next time
    buffer =s; // store it in the global buffer
    return v*d_amplitude/5;
  }
}

(是的,我知道一旦我读到一个包含两个 \n 的块,我就会遇到问题)

这很好用,除了我无法存储全局缓冲区中剩下的内容。在那一行我得到错误:

samplingthread.cpp:89: error: no match for 'operator*=' in
'((const SamplingThread*)this)->SamplingThread::buffer *= s'

我一直对这意味着什么感到困惑。我打算将一个 QString 复制到另一个 QString - 但是......?我是否在某处用指针弄乱了一些东西,但如果是这样,为什么我可以将 QStrings 分配给其他地方?和我只做一条线有什么区别?( s=strng.right(j+1) )

4

1 回答 1

3

摆脱价值函数上的“const”。

“const”函数只能调用其类变量的函数,如果它们也是“const”的话。这就是为什么有些功能起作用,而有些则不起作用的原因。

于 2012-12-18T20:43:39.977 回答