• 2918阅读
  • 6回复

[提问][已解决!]重写鼠标移动事件,实现label切图  之 "无线刷新图片" [复制链接]

上一主题 下一主题
离线chenwei8865
 

只看楼主 倒序阅读 楼主  发表于: 2017-11-14

void Widget::mouseMoveEvent(QMouseEvent *ev)
{
    int x=ev->x();
    int y=ev->y();

    if (x>clilabel->x()&&x<clilabel->x()+clilabel->width()&&y>clilabel->y()&&y<clilabel->y()+clilabel->height())
    {

       //this->setCursor(Qt::OpenHandCursor);
       //clilabel->setStyleSheet("background-image:url(E:/GIF/GIF.gif)");

        movie1 = new QMovie("E:/GIF/GIF2.gif");
        clilabel->setMovie(movie1);
        movie1->start();
    }else {

        movie2 = new QMovie("E:/GIF/GIF.gif");
        clilabel->setMovie(movie2);
        movie2->start();
    }
}

请问这里逻辑要怎么改啊?  
现在是 鼠标动一下 就重新载入这个GIF动图.
我鼠标多动几次,CUP就暴增...也是醉了.
离线chenwei8865

只看该作者 1楼 发表于: 2017-11-14
自己顶一下/...
离线大漠之鹰

只看该作者 2楼 发表于: 2017-11-14
你要实现什么功能啊?
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线chenwei8865

只看该作者 3楼 发表于: 2017-11-14
回 大漠之鹰 的帖子
大漠之鹰:你要实现什么功能啊? (2017-11-14 20:02) 

就是要  鼠标停留在 label  时显示一张gif动图,
鼠标离开则显示原来默认的gif 动图
离线小韩老师

只看该作者 4楼 发表于: 2017-11-14
        int x=ev->x();        int y=ev->y();
        if (x>clilabel->x()&&x<clilabel->x()+clilabel->width()&&y>clilabel->y()&&y<clilabel->y()+clilabel->height())    
    {
            //this->setCursor(Qt::OpenHandCursor);          
//clilabel->setStyleSheet("background-image:url(E:/GIF/GIF.gif)");        
    if(!movie1)//判断是否是空指针,也可以是movie1 == nullptr          
{              
movie1 = new QMovie("E:/GIF/GIF2.gif");              
        }else
{  
clilabel->setMovie(movie1);                  
movie1->stop();        
   }          
  movie1->start();        
}else {
            if(!movie2)//判断是否是空指针,也可以是movie2 == nullptr      
      {              
movie2 = new QMovie("E:/GIF/GIF.gif");            
    
  }else{    
    clilabel->setMovie(movie2);    
            movie2->stop();          
}            
movie2->start();        }
至少从程序上看你一直new指针是个bug,会内存泄露!其它的从代码上不知道了

离线chenwei8865

只看该作者 5楼 发表于: 2017-11-14
回 大漠之鹰 的帖子
大漠之鹰:你要实现什么功能啊? (2017-11-14 20:02) 

我那个代码中的  if 条件 是在别人的帖子中抄的 ,  不过好像有问题 .
就是说  鼠标只要一动,立马重新载入 图片.
我这个代码 即使在label  之外  移动鼠标 也会不断刷新图片.
而我想要的是  移到label 内  换图,  在这个label 里面 怎么移动 只要不出范围  就 保持这个图片的播放.
而 鼠标移出 label  也一样  就显示 原来默认的图片.

大神可以帮忙改下逻辑思路么  谢谢了
离线chenwei8865

只看该作者 6楼 发表于: 2017-11-14
回 小韩老师 的帖子
小韩老师:        int x=ev->x();        int y=ev->y();
        if (x>clilabel->x()&&x<clilabel->x()+clilabel->width()& .. (2017-11-14 20:25) 

先谢谢老师  ,我先试下
快速回复
限100 字节
 
上一个 下一个