我正在开发心电图应用程序。它每2毫秒获得一次心电图样本。 我的绘图机制如下: 1-缓冲样品 每30毫秒检查一次缓冲液并抽取样品(约15个样品)。 3-在每个时期使用QPainterPath。
我的示例代码如下所示,请注意,在此代码中,我从文件中读取样本!
1)widget.h文件:
class Widget : public QWidget
{
Q_OBJECT
int idx=0;
QTimer timer;
public:
explicit Widget(QWidget *parent=0);
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
public:
QStringList list;
float x=0;
QPointF aa;
public slots:
void changeT(){update();}
};
2)widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent) : QWidget(parent),aa(0,0)
{
connect(&timer,SIGNAL(timeout()),this,SLOT(changeT()));
timer.start(25);
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter;
painter.begin(this);
painter.setPen(QPen(Qt::black, 0.5, Qt::SolidLine, Qt::RoundCap));
QPainterPath path;
path.moveTo(aa);
for(int i=idx; i<idx+25 ; i++)
{
QPointF bb(x, list.at(i).toInt());
x+=0.25;
path.quadTo(aa,bb);
aa=bb;
}
idx+=25;
painter.drawPath(path);
QWidget::paintEvent(event);
painter.end();
}
3)main.cpp
#include "widget.h"
bool ECG_data(QStringList& strings)
{
QFile file("/home/amvajnegar/ecg.txt");
if (file.open(QIODevice::ReadOnly))
{
QTextStream in(&file);
while(!in.atEnd())
{
strings<< in.readLine();
}
return true;
}
return false;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList lst;
if(!ECG_data(lst))
{
qDebug()<<"nothing!";
return 0;
}
Widget wid;
wid.list = lst;
wid.show();
return a.exec();
}
现在我的问题是:
1-当我在每个时期绘制新样本时,应用程序将被删除 之前绘制的曲线!所以我总是只有一小部分曲线!我该如何解决这个问题?
2-我的嵌入式主板CPU使用率为100%。我怎么能减少它?对于 例如,我如何使用边界矩形或任何其他想法?
3-绘制这样的曲线是更好的机制吗? (我测试QCustomPlot和Qwt&gt;但不太好!)
这是我的ecg.txt文件 感谢。
答案 0 :(得分:0)
我找到了解决方案: 我不得不为QWidget更新方法设置边界矩形。此函数采用矩形并仅更新其中的像素。这是我对Widget类的新实现。主要功能不需要改变:
% the data (with even more categories):
yesno = categorical(randi(4,1250,1),1:4,{'no','yes','maybe','don''t know'});
race = categorical(randi(5,1250,1),1:5,{'Asian','Black','BHispanic','White','WHispanic'});
% convert everything to numeric:
yn = double(yesno);
rac = double(race);
% caluculate all frequencies:
data = accumarray([rac yn],1);
% get the categories names:
races = categories(race);
answers = categories(yesno);
% plotting:
bar(data,0.4,'stacked');
ax = gca;
ax.XTickLabel = races; % set the x-axis ticks to the race names
legend(answers) % add a legend for the colors
colormap(lines(numel(answers))) % use pretier colors
ylabel('YES/NO')% set the y-axis lable
% some other minor fixes:
box off
ax.YGrid = 'on';
答案 1 :(得分:0)
您可以使用精彩的绘图库 - JOIN
。