天嵌 ARM开发社区

 找回密码
 注册
查看: 2397|回复: 1

Qt示波器,关于重绘问题

[复制链接]
reynoldxu 发表于 2011-2-5 11:58:35 | 显示全部楼层 |阅读模式
大家新年好,最近在做一个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那块地方始终无法重绘??

请教各位高手指点,谢谢!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
TQ_guoxixiao 发表于 2011-12-22 11:26:20 | 显示全部楼层
1、有了这个对话框,之后,对话框占据的位置没法重绘制,你关掉对话框不就可以了?
2、添加对话框可以重绘,可能需要延时,你加延时试一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 07:28 , Processed in 1.018594 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表