查看完整版本: [-- [已解决!]重写鼠标移动事件,实现label切图  之 "无线刷新图片" --]

QTCN开发网 -> Qt基础编程 -> [已解决!]重写鼠标移动事件,实现label切图  之 "无线刷新图片" [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

chenwei8865 2017-11-14 19:49

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


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 2017-11-14 19:50
自己顶一下/...

大漠之鹰 2017-11-14 20:02
你要实现什么功能啊?

chenwei8865 2017-11-14 20:25
大漠之鹰:你要实现什么功能啊? (2017-11-14 20:02) 

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

小韩老师 2017-11-14 20:25
        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 2017-11-14 20:31
大漠之鹰:你要实现什么功能啊? (2017-11-14 20:02) 

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

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

chenwei8865 2017-11-14 21:20
小韩老师:        int x=ev->x();        int y=ev->y();
        if (x>clilabel->x()&&x<clilabel->x()+clilabel->width()& .. (2017-11-14 20:25) 

先谢谢老师  ,我先试下


查看完整版本: [-- [已解决!]重写鼠标移动事件,实现label切图  之 "无线刷新图片" --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled