• 7218阅读
  • 6回复

Qt关于显示移动图片的问题 [复制链接]

上一主题 下一主题
离线jiangzy80
 
只看楼主 倒序阅读 楼主  发表于: 2010-06-01
hi,   小弟刚接触Qt不久,现在想做一个小例子,就是把多幅图片(jpg格式的)显示在窗口上,图片是从屏幕左边移动到屏幕右边的,在移动过程中,图片也作了360度的旋转。

我定义了一个类:
class   JoneyView   :   public   QWidget
{
                Q_OBJECT

protected:
        void   paintEvent(QPaintEvent   *event   =   0);

public:
        JoneyView(QWidget   *parent,   QRect   pRect);
        ~JoneyView();

.........


}


void   JoneyView::paintEvent(QPaintEvent   *event)
{
        static   QPixmap   pix(this-> size());
        pix.fill(this,   this-> rect().topLeft());
        QPainter   p(&pix);

        p.setRenderHint(QPainter::Antialiasing,   true);
        p.setPen(QPen(Qt::black,   12,   Qt::DashDotLine,   Qt::RoundCap));
        p.setBrush(QBrush(Qt::green,   Qt::SolidPattern));
        p.drawEllipse(mRect3);

        p.end();

        QPainter   painter(this);
        painter.begin(this);
        painter.drawPixmap(rect(),   pix);
        painter.end();


/*
        QPainter   painter(this);
        painter.setRenderHint(QPainter::Antialiasing,   false);

        if   (!mTimerIsStarted)
                painter.drawPixmap(mRect3,   mImage3);
*/

}

其中的mRect3是一个由QTimer控制的从左到右不断变化的QRect.
mImage3是在别的地方加载的一个图片,调用update来触发paintEvent重绘图片
但是在paintEvent函数中,不管是没有注释的双缓冲画图部分还是已经注释了的显示图片的部分,在图像移动的过程中都出现了很明显的闪烁现象,如果图片不移动,只是在原位置旋转都看不见闪烁现象,往高手帮忙解决下,谢谢了

主要就是一旦移动图片,就出现闪烁,我把图片变小了试都还是有闪烁,Qt应该是比较成熟的了,像这类的问题应该是可以实现的。

iTimer->start(100);
这个应该还是比较慢了

paintEvent中没有注释的部分应该就是双缓冲技术了吧,我在每次Timeout的时候只是计算了下rect的值而已,然后就update了,但是明显的看出这个椭圆有闪烁,我用的是黑色背景,每次移动的过程中,很明显的能看见有些白色的线条在闪烁,但是闪烁的不是很大哈,但是肉眼能看见。

不知是不是我哪里还没有处理好?望指出,谢谢了!
离线jiangzy80
只看该作者 1楼 发表于: 2010-06-02
高手帮帮忙,最近急需解决。
离线robertkun

只看该作者 2楼 发表于: 2010-06-02
传个源码上来呗~
                                              简单的生活使人快乐!
离线xlttap

只看该作者 3楼 发表于: 2010-06-02
你把没有注释的那部分提到paintEvent外部才是双缓冲.如果你这样,一直在paintEvent中画,当然还是会闪烁的.
双缓冲是你在先画到一个buffer中,再把这个buffer在paintEvent中画出来。
我简单我快乐
离线jiangzy80
只看该作者 4楼 发表于: 2010-06-02
楼上的兄弟,我试了一下还是不行,可能是我哪里没弄对,能不能帮我弄个例子呢?哪怕只是画一条线都可以。谢过了~!
离线jiangzy80
只看该作者 5楼 发表于: 2010-06-04
有没有高手有例子?
离线like350814
只看该作者 6楼 发表于: 2011-07-28
楼主,传个源码上来,看看的啊
快速回复
限100 字节
 
上一个 下一个