织梦CMS - 轻松建站从此开始!

罗索

QT制作全屏播放器以及出现的问题

落鹤生 发布于 2012-03-30 11:40 点击:次 
使用QT做播放器使用widget::winid可以获取播放器组件的windows句柄并以命令行的方式调起另一个程序使用D3D将内存缓冲区的图像打在上面。但是在做全屏是出现了问题
TAG:

使用QT做播放器使用widget::winid可以获取播放器组件的windows句柄并以命令行的方式调起另一个程序使用D3D将内存缓冲区的图像打在上面。但是在做全屏是出现了问题,如果让播放器组件自己独立全屏就使用代码:

  1. MainWindow::MainWindow(QWidget *parent) 
  2.     _previewInitParent = ui->preview->parentWidget(); 
  3.     _previewInitPoit = ui->preview->pos(); 
  4.     _previewInitSize = ui->preview->size(); 
  5.  
  6. void MainWindow::toggleFullscreen(){ 
  7. if (ui->preview->isFullScreen() || ui->preview->parentWidget() == NULL) 
  8.     { 
  9.         ui->preview->setParent(_previewInitParent);// 
  10.         ui->preview->resize(_previewInitSize); 
  11.         ui->preview->move(_previewInitPoit); 
  12.         ui->preview->show();///<改变parent之后要show 
  13.     } 
  14.     else 
  15.     { 
  16.         ui->preview->setParent(NULL); 
  17.         ui->preview->showFullScreen(); 
  18.     } 

但是,这样出现的问题就是切换到全屏,或者是全屏切回组件,这个播放器窗口/组件(widget)的winid发生了改变,上面就不会再显示视频了。

搜索解决禁止winid改变的方法未果,我就换了一种方式做全屏,将整个主窗口全屏,然后让播放器扩大到整个窗口中,采用代码:

  1. void MainWindow::toggleFullscreen() 
  2.     if (this->isFullScreen()) 
  3.     { 
  4.         this->showNormal(); 
  5.         ui->preview->resize(_previewInitSize); 
  6.         ui->preview->move(_previewInitPoit); 
  7.         this->statusBar()->show(); 
  8.     } 
  9.     else 
  10.     { 
  11.         this->showFullScreen(); 
  12.         ui->preview->resize(this->size()); 
  13.         ui->preview->move(0, 0); 
  14.         this->statusBar()->hide(); 
  15.     } 
  16. } 

有谁能解决winid不改变时切换组件的全屏,请告之……

(k1988)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201203/15887.html]
本文出处:CSDN博客 作者:k1988 原文
顶一下
(6)
85.7%
踩一下
(1)
14.3%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容