我想做一个从Arduino输出值并在Qt中绘制形状的项目。我不确定QCustomPlot
是否可以做到这一点。你能给我一些建议吗?
例如,我创建了一个Qt GUI,用于输入位置(x,y)到Arduino并进行计算,然后Arduino将值信号发送到Qt并在我想要的位置上绘制形状。有可能吗?
答案 0 :(得分:0)
几年前,我使用QWT和QextSerialPort做了类似的事情。您必须使用串行连接(在Windows COM1,COM2 ...中)连接Arduino,并且您将能够从缓冲区读取/写入数据。
现在,Qt集成了对此任务的本机支持,请检查QtSerialPort Support,以配置您的端口检查此类QSerialPort。如何读取数据?使用QByteArray,一个例子:
QByteArray responseData = serial->readAll();
while(serial->waitForReadyRead(100))
responseData += serial->readAll();
现在将所有字节存储在double类型的QVector中。
QVector<double> data;
QDataStream stream(line);
stream >> data;
此数据将由QCustomPlot绘制。例如:
int numSamples = data.size();
QVector<double> x(numSamples), y(numSamples); // initialize with entries 0..100
for (int i=0; i<numSamples; ++i)
{
x[i] = i/50.0 - 1; // x goes from -1 to 1
y[i] = data[i]; // In this line copy the data from your Arduino Buffer and apply what you want, maybe some signal processing
}
// create graph and assign data to it:
customPlot->addGraph();
customPlot->graph(0)->setData(x, y);
// give the axes some labels:
customPlot->xAxis->setLabel("x");
customPlot->yAxis->setLabel("y");
// set axes ranges, so we see all data:
customPlot->xAxis->setRange(-1, 1);
customPlot->yAxis->setRange(0, 1);
customPlot->replot();
享受!