在label中画图,总共就这么多分了,求各位大大,想好久了,帮帮忙!!
我的目的是,创建一个窗口,窗口中添加Label,在label中画实时曲线图(最终图为AD卡采集的电压值,画曲线图),现在只是简单曲线图。label可以任意挪动位置,曲线图也相对挪动。
用向导定义了一个MainWindow类,然后又新增了drawLabel类,drawLabel.cpp。继承于QLabel
问题是 1,在窗口显示了,没在Qlabel中显示。
代码为画曲线:
drawLabel::drawLabel(QWidget *parent):QLabel(parent)
{
for(int i=0;i<DATA_X;i++)
buffer[i] = (int)(sin((i*PI) / 100) * 100);
QTimer *timer = new QTimer();
QObject::connect(timer,SIGNAL(timeout()),this,SLOT(flushBuff()));
timer->start(100);
}
void drawLabel::flushBuff()
{
int tmp = buffer[0];
for(int i=0;i<DATA_X;i++)
{
if(i == DATA_X - 1)
{
buffer[DATA_X - 1] = tmp;
break;
}
buffer[i] = buffer[i+1];
}
update();
}
void drawLabel::paintEvent(QPaintEvent *)
{
QPainter painter(this) ;
QPoint beginPoint;
QPoint endPoint;
painter.setPen(Qt::red);
for(int i=0;i<DATA_X;i++)
{
qDebug()<<"X = "<<2*i+100<<"Y = "<<buffer[i]+100;
beginPoint.setX(2*i);//a*i a决定波长,a越大波长越大
beginPoint.setY(buffer[i]);//a*i+b a决定振幅大小
endPoint.setX(2*i+1);
endPoint.setY(buffer[i+1]);
painter.drawLine(beginPoint,endPoint);
}
}
下面是MainWindow类
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget::setWindowTitle(tr("绘图"));
QWidget::setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);
drawLabel *label = new drawLabel;
QMainWindow::setCentralWidget(label);
}
MainWindow::~MainWindow()
{
delete ui;
}
问题是画的曲线图一直是在窗口上,没在drawLabel上,怎么才能画在drawlabel上啊,问题不知道出在哪,都3天了。。谢谢各位大大!!还有一个问题:怎么在代码中改变drawLabel的位置。。总共就这么多分了