我很喜欢编程,但对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))
答案 0 :(得分:3)
摆脱价值函数的“常量”。
“const”函数只能调用其类变量的函数,如果它们也是“const”的话。这就是为什么有些功能有效,有些功能无效。