|
大家新年好,最近在做一个qt示波器(2440的板子)但碰到关于重绘的一个问题
【我原来的想法类只管把数据重绘出来,main函数负责把数据写入public:DrawBuffer数组中,现在时用AD来获取数据】
class Dialog【开始时选base class是Dialog】中增加了
//dialog.h
public:
void paintEvent(QPaintEvent *);
int DrawBuffer[320];//要重绘的数据
具体函数
//dialog.cpp
void Dialog::paintEvent(QPaintEvent *)
{
int i;
QPainter painter(this);
QPixmap pixmap;
pixmap = QPixmap(320,240);
pixmap.fill(Qt::black);
painter.drawPixmap(0, 0, pixmap);
painter.initFrom(this);
painter.setPen(Qt::green);
painter.drawLine( pixmap.width()/2,0,pixmap.width()/2,pixmap.height() );//y
painter.drawLine(0,pixmap.height()/2,pixmap.width(),pixmap.height()/2);//x
painter.translate(0,120);
painter.setPen(Qt::blue);
i=0;
for(i=0;i<320;i++){
painter.drawPoint(i, -(DrawBuffer) );
}
}
主函数
//main.cpp
#include <QtGui/QApplication>
#include "dialog.h"
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/fs.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
int fd,i;
QApplication a(argc, argv);
Dialog w;
w.show();
fd = open("/dev/adc", 0);//打开ADC
if (fd < 0){perror("open ADC device !");exit(1);}//是否打开错误
//!! QMessageBox::information(NULL,"Info","start");//没这句话窗口无法绘制,只有一个鼠标箭头,背景全黑,但串口仍旧发送数据;;;;但时加了这句话后,可以重绘,但MessageDialog的部分无法重绘??
while(1)//死循(读数据,写入DrawBuffer,重绘)
{
char buffer[5];
int len ;
for(i=0;i<320;i++)
{
len = read(fd, buffer, sizeof buffer);
if (len > 0)
{
int value;
sscanf(buffer, "%d", &value);
w.DrawBuffer=value; //写入Drawuffer
printf("ADC Value: %d\n", value);//串口发出数据
}
else
{
perror("read ADC device !");
exit(1);
}
}
w.repaint();//重绘,原来是用update()的,但是无法重绘
}
a.exec();
}
于是,没有QMessageBox::information弹出窗口,就无法显示窗口,有一个鼠标箭头,背景全黑(w.show();没用的??)-_-有了QMessageBox::information,QMessageBox::information那块地方始终无法重绘??
请教各位高手指点,谢谢!!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|