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

ovwvwvo 2015-10-16 11:11:14
我的目的是,创建一个窗口,窗口中添加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的位置。。总共就这么多分了,
...全文
300 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
光电楼301 2019-08-06
  • 打赏
  • 举报
回复
你的画家应该是指定父类才行,哈哈 好久的问题了 QPainter painter(你的label) ;
91program 2015-10-19
  • 打赏
  • 举报
回复
你想要画在 label 上,就必须使用 label 对应的画图类函数。 但从 LZ 提供的代码看,只定义了 label ,但并没有使用它啊。
91program 2015-10-19
  • 打赏
  • 举报
回复
引用 1 楼 accessysq 的回复:
QT不懂。。。。别找我。
一样,没有用过 QT。
  • 打赏
  • 举报
回复
QT不懂。。。。别找我。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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