在label中画图,总共就这么多分了,求各位大大,想好久了,帮帮忙!!

ovwvwvo 2015-10-16 11:39:26
我的目的是,创建一个窗口,窗口中添加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的位置。。总共就这么多分了
...全文
119 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
风之水2003 2015-10-17
  • 打赏
  • 举报
回复
我去,错过了100分
ovwvwvo 2015-10-16
  • 打赏
  • 举报
回复
自己顶!!!!!!!
冷静忍耐 2015-10-16
  • 打赏
  • 举报
回复
drawLabel *label = new drawLabel; QMainWindow::setCentralWidget(label); 这两句不就是把drawLabel这个放在整个QMainWindow窗口上了吗。其实是画在Label上的,你可以给label加个背景色就看出来了。 你可以定义一个widget再QMainWindow::setCentralWidget(widget); 然后把Label放在widget上就好了,移动的话直接label->move(x, y); drawLabel *label = new drawLabel(widget); label->move(200, 200);

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧