最近用了Qt做了一些动画效果,发现一个问题,如果用paint或者paintevent函数结合timerevent函数绘图,实现的渐变或者是淡入淡出很慢
我用的是单象素分别绘图,就是把图像的每个象素点读出来,然后经过一定的计算再绘制上去,实现图像时间上和空间上的变化。但是,绘制一个1024*768的图像,在3.2秒实现16个条形分部显示就很慢了。甚至有的时候就是不用timer来绘制,直接将图片单个象素同一时间绘制就觉得窗口有点延迟了。
是不是实现这些功能有其他的好办法,或者有什么解决方案呢?
注:不要怀疑我的机器配置
这是我做循环计算的代码:
if (k<=x&&x<200*(k+1))
{
for (int i = 0; i < image.width(); ++i)
{
for (int j = 0; j < image.height(); ++j)
{
if ((k*64*k*64*2)<=(i*i+j*j)&&(i*i+j*j)<((k+1)*64*(k+1)*64*2))
高手赐教,不胜感激!
下面是设置图片透明度效果的。
float opacity=0.7;
QGraphicsOpacityEffect *effect=new QGraphicsOpacityEffect();
effect->setOpacity(opacity);
ui->label->setGraphicsEffect(effect);
可以连接一个timer来设置透明度。0完全透明,1.0完全不透明。
PS:
你那个方法有点慢因为一个个要绘屏。写IO有点慢。
还有个方法。就是你把要的图片在一个线程里绘制好。Gui线程直接绘制就好了。
最后。。qml实现这个功能更简单。。。用animation