无法分配给qstring变量

时间:2012-12-18 20:39:24

标签: c++ qt

我很喜欢编程,但对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))

1 个答案:

答案 0 :(得分:3)

摆脱价值函数的“常量”。

“const”函数只能调用其类变量的函数,如果它们也是“const”的话。这就是为什么有些功能有效,有些功能无效。