WebEngine小部件视频播放器示例#
使用 QWebEngineView
显示全屏视频。
视频播放器演示如何使用 QWebEngineView
支持全屏播放HTML5视频。
全屏API 是一个跨浏览器的JavaScript API,允许网页请求其中一个HTML元素占用用户整个屏幕。它通常用于通过 <video>
元素进行全屏视频播放,但原则上可以用于以全屏模式显示任何HTML内容。Qt WebEngine支持此API,但默认情况下是禁用的。此示例显示了开启它的步骤,包括
在
QWebEngineSettings
中启用它。通过创建新的全屏窗口处理
fullScreenRequested
信号。显示一个通知弹出窗口以确保用户知道有东西正在全屏显示。
运行示例#
要从Qt Creator运行示例,打开欢迎模式并从示例中选择示例。有关更多信息,请参阅构建和运行示例。
概览#
启动示例程序后,它将创建一个正常的(非全屏)窗口,显示一个嵌入式的YouTube视频播放器 QWebEngineView
。然后您可以点击全屏切换按钮(右下角)进入全屏模式。这还应该显示一个居中的通知叠加层,通知您可以通过按Esc键退出全屏模式。
从实现角度来看,进入全屏模式涉及创建一个新的全屏窗口,并使用单独的 QWebEngineView
实例,并将正常的 QWebEnginePage
从常规窗口的 QWebEngineView
迁移到这个新的 QWebEngineView
上。退出全屏模式会逆转这一迁移。
示例代码分为三个类,分别为 MainWindow
、FullScreenWindow
和 FullScreenNotification
。类 MainWindow
和 FullScreenWindow
分别负责管理一个顶层窗口,而 FullScreenNotification
负责通知框的样式和动画。在启动时创建一个 MainWindow
并在程序运行期间持续存在,而每次进入全屏模式时都会创建一个新的 FullScreenWindow
。
MainWindow 类声明#
MainWindow
是一个 QMainWindow,并且使用一个 QWebEngineView
作为中心部件
MainWindow 类定义#
在构造函数中,我们首先将 QWebEngineView
设置为中心部件
然后我们配置 Qt WebEngine 以声明支持全屏 API
如果没有这一行,全屏切换按钮将处于禁用状态(灰色),因为页面中运行的 JavaScript 可以检测到我们的浏览器不支持全屏模式。
接下来,我们连接 fullScreenRequested
信号到我们的槽
此信号会在页面的 JavaScript 试图进入或退出全屏模式时发出。如果没有处理此信号(但仍然将 FullScreenSupportEnabled
属性设置为 true
),则切换按钮将处于启用状态,但点击它将没有任何效果,因为 JavaScript 的全屏请求将被拒绝。
最后,我们将一些 HTML(见附带示例中的 webenginewidgets/videoplayer/data/index.html
)加载到我们的 QWebEngineView
MainWindow
的第二部分是处理全屏请求
进入全屏模式时,我们创建一个新的 FullScreenWindow
,退出时删除它。
FullScreenWindow 类声明#
FullScreenWindow
是一个包含 QWebEngineView
和 FullScreenNotification
的 QWidget。
FullScreenWindow 类定义#
构造函数负责隐藏正常窗口(同时保存其几何形状)并显示新的 FullScreenWindow
。
setPage
调用将从 MainWindow
的视图将网页移动到 FullScreenWindow
的视图。
在析构函数中,我们使用相同的方法将页面移回,然后恢复主窗口的几何形状和可见性。
我们重写 QWidget::resizeEvent 以进行手动布局,保持 QWebEngineView
最大化,并将 FullScreenNotification
居中显示在窗口内。
FullScreenNotification 类声明#
FullScreenNotification
只是一个带有一些样式和动画的 QLabel。
FullScreenWindow 类定义#
在构造函数中,我们配置 QLabel 并使用动画框架设置一个延迟淡出动画。
我们使用的自定义信号 shown
用于触发动画,是从 showEvent
方法发出的。