• 7345阅读
  • 13回复

如何让hide后重新显示的控件不闪? [复制链接]

上一主题 下一主题
离线szholic
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-12
  需要截取控件后面一层的图片。
  因此在定时器里将控件用hide()隐藏,可用show()再次显示控件时会不停的闪烁,哪位高手给点意见?
[ 此帖被szholic在2010-03-12 16:02重新编辑 ]
离线szholic
只看该作者 1楼 发表于: 2010-03-12
我是用grabWindow截取窗口某个区域的
或者哪位知道有没有办法可以直接截取某个图层的图片?
离线yangfanxing
只看该作者 2楼 发表于: 2010-03-12
引用第1楼szholic于2010-03-12 15:53发表的  :
我是用grabWindow截取窗口某个区域的
或者哪位知道有没有办法可以直接截取某个图层的图片?

QImage::copy()?
PHPWind好恶心。。。不想看这种界面。。。
离线yangfanxing
只看该作者 3楼 发表于: 2010-03-12
引用楼主szholic于2010-03-12 15:27发表的 如何让hide后重新显示的控件不闪? :
  需要截取控件后面一层的图片。
  因此在定时器里将控件用hide()隐藏,可用show()再次显示控件时会不停的闪烁,哪位高手给点意见?

是不停地hide() show()吧???是否这样你把timer设成1s这样子就看出来了。
PHPWind好恶心。。。不想看这种界面。。。
离线szholic
只看该作者 4楼 发表于: 2010-03-12
还是闪,而且截出来的图片成了默认的灰色。
其他区域的图片倒没问题
离线szholic
只看该作者 5楼 发表于: 2010-03-12
引用第3楼yangfanxing于2010-03-12 16:37发表的  :
是不停地hide() show()吧???是否这样你把timer设成1s这样子就看出来了。


yangfanxing:
  的确是用hide(),show()的, 设成1s还是有点闪?
  还有grabWindow截其他区域的图片没问题,截控件后面的图片即使已经hide() 好像还是灰色。
离线yangfanxing
只看该作者 6楼 发表于: 2010-03-12
引用第5楼szholic于2010-03-12 18:38发表的  :
yangfanxing:
  的确是用hide(),show()的, 设成1s还是有点闪?
  还有grabWindow截其他区域的图片没问题,截控件后面的图片即使已经hide() 好像还是灰色。


那个。。。有点儿看不太懂是啥意思。。。不好意思。。。
还是闪什么的是不是不小心触发了“update”的神经啊,所以窗口(或者是区域)不停刷新?
PHPWind好恶心。。。不想看这种界面。。。
离线szholic
只看该作者 7楼 发表于: 2010-03-12
引用第6楼yangfanxing于2010-03-12 19:48发表的  :
那个。。。有点儿看不太懂是啥意思。。。不好意思。。。
还是闪什么的是不是不小心触发了“update”的神经啊,所以窗口(或者是区域)不停刷新?


呵呵,多谢yangfanxing耐心询问
的确在定时器响应函数里先hide() 截取图片后又show()了,估计是这个原因
不知道有么有更好的解决方法
离线yangfanxing
只看该作者 8楼 发表于: 2010-03-12
我是说啊,像
“需要截取控件后面一层的图片。”这样的说明让大家不怎么看懂,问题重新描述一下也许就明了了,大家也能看出个究竟~

有个图片说明什么的最好了~
PHPWind好恶心。。。不想看这种界面。。。
离线benbenmajia

只看该作者 9楼 发表于: 2010-03-15
呃,这个顺序很重要
安然.....
离线szholic
只看该作者 10楼 发表于: 2010-03-15
引用第8楼yangfanxing于2010-03-12 21:54发表的  :
我是说啊,像
“需要截取控件后面一层的图片。”这样的说明让大家不怎么看懂,问题重新描述一下也许就明了了,大家也能看出个究竟~
有个图片说明什么的最好了~


多谢,构造函数中:
          
              showWidget = new QLabel(this);  //showWidget用来显示视频
             toolBar = new QToolBar(showWidget);

定时器中

      toolBar->hide();
      tempPixmap = QPixmap::grabWindow(showWidget->window()->winId(), 0,0,640, 50);
      tempPixmap.save("temp.png")
      toolBar->show();


定时器每隔几毫秒抓图一次,但temp.png有时为默认灰色,有时为图片。
离线yangfanxing
只看该作者 11楼 发表于: 2010-03-15
引用第10楼szholic于2010-03-15 19:18发表的  :
多谢,构造函数中:
          
定时器每隔几毫秒抓图一次,但temp.png有时为默认灰色,有时为图片。


不知道视频播放的原理。。。如果视频帧之间有空闲时间,而这个空闲时间恰好被grab了!

这样的话,temp中应该每次的图像都会是一样的???(灰色图比较有规律出现的,而且每次试验频率接近?)
PHPWind好恶心。。。不想看这种界面。。。
离线szholic
只看该作者 12楼 发表于: 2010-03-16
yangfanxing:

1. 对于抓到图片为灰色:
        timer->start(1); 定时器定时抓图时间间隔从1到1000隔一段时间都试了一下,很多时间都是灰色。怀疑是视频帧时间不匹配问题,本人菜鸟不知如何解决?

2. hide后用show()函数还是会闪,纠结中......
离线yangfanxing
只看该作者 13楼 发表于: 2010-03-16
引用第12楼szholic于2010-03-16 10:00发表的  :
yangfanxing:
1. 对于抓到图片为灰色:
        timer->start(1); 定时器定时抓图时间间隔从1到1000隔一段时间都试了一下,很多时间都是灰色。怀疑是视频帧时间不匹配问题,本人菜鸟不知如何解决?
.......


同菜,我也是在友情顶贴啊。。。
还是考虑会不是paintEvent()被那啥了的关系?或许错不在QTimer。

你在重绘事件paintEvent()中qDebug()一个,看看hide()-show()以后是不是无限制输出了???
PHPWind好恶心。。。不想看这种界面。。。
快速回复
限100 字节
 
上一个 下一个