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了,但是明显的看出这个椭圆有闪烁,我用的是黑色背景,每次移动的过程中,很明显的能看见有些白色的线条在闪烁,但是闪烁的不是很大哈,但是肉眼能看见。
不知是不是我哪里还没有处理好?望指出,谢谢了!