Q闪烁问题

时华 2016-03-18 11:19:47
今天看了《代码本色》,对于上面的例子我用Qt实现了一下,但是问题出现了。
在绘制小球移动效果时,感觉画面不平滑,帧设置太小有一种顿感,太快又有一种闪烁
部分代码如下:
circle.x+=circle.xV;//小球移动距离x方向的速度
circle.y+=circle.yV;//
pixmap.fill(Qt::white);
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::black,3));
painter.drawEllipse(QPoint(circle.x,circle.y),circle.radius,circle.radius);
update();
}

void Widget::paintEvent(QPaintEvent *e){


QPainter painter(this);

painter.drawPixmap(QPoint(0,0),pixmap);
//painter.drawEllipse(QPoint(circle.x,circle.y),circle.radius,circle.radius);
}
这一段是我在百度Qt解决闪烁效果之后写的,但是还是没有用,求教!
...全文
226 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
时华 2016-03-20
  • 打赏
  • 举报
回复
不好意思,没有及时回复!我试了一下,还是不行!我把全部的源码写上,你先运行帮我看看,好吗? idget::Widget(QWidget *parent) : QWidget(parent),pixmap(width(),height()) { circle.x=width()/2; circle.y=height()/2; circle.xV=10; circle.yV=20; circle.radius=20; timer=new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(step())); timer->start(41); setAutoFillBackground(false); } void Widget::step(){ if(circle.x+circle.xV+circle.radius>width()|| circle.x+circle.xV-circle.radius<0) circle.xV=0-circle.xV; if(circle.y+circle.yV+circle.radius>height() || circle.y+circle.yV-circle.radius<0) circle.yV=0-circle.yV; circle.x+=circle.xV; circle.y+=circle.yV; pixmap.fill(Qt::white); QPainter painter(&pixmap); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(Qt::yellow); painter.drawEllipse(QPoint(circle.x,circle.y),circle.radius,circle.radius); update(); } Widget::~Widget() { } void Widget::paintEvent(QPaintEvent *e){ QStylePainter painter1(this); painter1.drawPixmap(QPoint(0,0),pixmap); //painter.drawEllipse(QPoint(circle.x,circle.y),circle.radius,circle.radius); }
jiqiang01234 2016-03-19
  • 打赏
  • 举报
回复
setAutoFillBackground(false)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧