我能读取心电信号,并能用QPainter绘制波形。但是产生的波是通过移除第一个坐标并附加新的坐标作为最后一点而形成的。这就给了波浪一个滚动的效果。
我想知道是否有任何方法可以像病人监测系统那样来绘制波形(运行波形长度的黑色条形图,并像这一样更新波形)。
代码示例或代码片段将非常helpful.Thanks。
发布于 2015-11-14 14:40:11
下面是一个简单的例子,在几行代码中,虽然不够完美,但足以让人理解这个想法:
class ECG : public QWidget {
Q_OBJECT
public:
ECG(QWidget * p) : QWidget(p), t(0), x(0), lastPoint(0,0) {
setAttribute(Qt::WA_NoSystemBackground); // don't erase previous painting
}
void paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.setPen(QPen(Qt::green, 2));
painter.fillRect(x, 0, 60, height(), Qt::black);
if (line.length() < 100) painter.drawLine(line); // don't draw a line accross the screen
}
public slots:
void drawReading(qreal reading) {
x = t++ % width();
QPointF newPoint(x, (reading * height() * 0.4) + (height() * 0.5));
line = QLineF(lastPoint, newPoint);
lastPoint = newPoint;
update();
}
private:
quint32 t, x;
QPointF lastPoint;
QLineF line;
};这个小部件将绘制出与您想要的类似的东西,并且它被设置为接受-1.0到1.0之间的读数。

您可以用生成器来测试它:
class Gen : public QObject {
Q_OBJECT
public:
Gen(int f) : time(0) {
t.setInterval(30);
freq = (2 * 3.14159) / f;
connect(&t, QTimer::timeout, [&](){
qreal r = sin(time);
time = fmod(time + freq, 2 * 3.14159);
emit newReading(r);
});
}
public slots:
void toggle() { t.isActive() ? t.stop() : t.start(); }
signals:
void newReading(qreal);
private:
QTimer t;
qreal time, freq;
};int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ECG e(0);
e.show();
Gen g(60);
QObject::connect(&g, SIGNAL(newReading(qreal)), &e, SLOT(drawReading(qreal)));
g.toggle();
return a.exec();
}https://stackoverflow.com/questions/33708497
复制相似问题