QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4395|回复: 5

Qt绘制波形问题!

[复制链接]
发表于 2005-11-30 11:54:07 | 显示全部楼层 |阅读模式
本人最近编写基于qtopia 的波形显示程序,程序大概是绘制五条移动的波形!
是分别用长度都为400的数组保存数据的!
但是绘制的结果显示总是有闪烁和抖动!

期间我用qt 里的QPixmap 和QPixmapCache类进行象素映射,效果并不明显!
请问还可以运用什么方法呢??谢谢!!
发表于 2005-12-1 12:34:29 | 显示全部楼层
我前天问了个很简单的问题(http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=14091都没人能解答,你这么难的问题我估计没有人帮得了你了。

还是帮你顶一下吧!
回复

使用道具 举报

 楼主| 发表于 2005-12-5 17:36:57 | 显示全部楼层
难道就让问题在这里"横行霸道么??" 哪位高手拔刀相助呀 !!!!!谢谢了!!
回复

使用道具 举报

发表于 2005-12-6 23:06:56 | 显示全部楼层
What platform are you using? If its S3C2410, a bad arithmetic of displaying may cause this kind of issue... I guess.
回复

使用道具 举报

发表于 2005-12-8 18:24:09 | 显示全部楼层
不要每次都更新所有的显示显示内容,只擦除不要的,加上新的闪烁会好些
回复

使用道具 举报

发表于 2005-12-15 18:33:15 | 显示全部楼层
见下面两个程序,一个闪,一个不闪
闪:
[code:1]
#include <qapplication.h>
#include <qwidget.h>
#include <qcolor.h>
#include <qpen.h>
#include <qpainter.h>
#include <qtimer.h>

class ShineWidget : public QWidget
{
        QTimer* timer;
public:
        ShineWidget( QWidget *parent=0, const char *name=0, WFlags f = 0)
                :QWidget(parent,name, f)
        {
                timer=new QTimer(this);
                connect(timer,SIGNAL(timeout()),this,SLOT(repaint()));
                timer->start(50);
        }

protected:
        void paintEvent ( QPaintEvent *  )
        {
                const int lines=100;
                QPainter p(this);
                int w=this->width(); int h=this->height();
                static int x=0;
                p.setPen(QPen(QColor(0,0,255),2));
                for(int i=0;i<lines;i++)
                {
                        p.drawLine(0,h*i/lines,w,h*i/lines);
                        p.drawLine(w*i/lines,0,w*i/lines,h);
                }

                p.setPen(QPen(QColor(255,0,0),5));
                p.drawRect(x,h/2,50,30);
                x=x+w/100;
                if(x>w)x=0;

        }
};




int main( int argc, char **argv )
{
        QApplication a( argc, argv );
        ShineWidget w(0,0);
        w.show();
        a.setMainWidget(&w);
        return a.exec();
}

[/code:1]


不闪:
[code:1]
#include <qapplication.h>
#include <qwidget.h>
#include <qimage.h>
#include <qpixmap.h>
#include <qbitmap.h>
#include <qfile.h>
#include <qpainter.h>
#include <qpoint.h>
#include <qpaintdevice.h>

#include <qtimer.h>

class NotShineWidget : public QWidget
{
        QTimer* timer;

public:
        NotShineWidget( QWidget *parent=0, const char *name=0, WFlags f = 0)
                :QWidget(parent,name, f)
        {
                setBackgroundMode(Qt::NoBackground );                   //让QT 不要清除窗口
                timer=new QTimer(this);                          //设置 定时器, 定时 repaint();
                connect(timer,SIGNAL(timeout()),this,SLOT(repaint()));
                timer->start(50);                                       // repaint() 周期 为  20 mS

        }

protected:
        void paintEvent ( QPaintEvent *  )
        {
                const int lines=100;
                int w=this->width(); int h=this->height();
                QPixmap pm(w,h);                                        //生成 一个  QPixmap 为Cache
                pm.fill();
                QPainter p1(&pm);                                              //在 QPixmap 上作图
                static int x=0;
                p1.setPen(QPen(QColor(0,0,255),2));
                for(int i=0;i<lines;i++)
                {
                        p1.drawLine(0,h*i/lines,w,h*i/lines);
                        p1.drawLine(w*i/lines,0,w*i/lines,h);
                }

                p1.setPen(QPen(QColor(255,0,0),5));
                p1.drawRect(x,h/2,50,30);
                x=x+w/100;
                if(x>w)x=0;

                QPainter p(this);
                p.drawPixmap ( 0,0, pm);                                       //将 Pixmap 画到 窗口上.
        }

};
int main( int argc, char **argv )
{
    QApplication a( argc, argv );

   NotShineWidget w(0,0);
    w.show();

    a.setMainWidget(&w);


    return a.exec();

}



[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-27 11:35 , Processed in 0.073446 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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