本想用enterEvent和leaveEvent事件实现鼠标进入视频播放的区域就显示进度条,出来就隐藏进度条。
问题:在上一章为了实现双击全屏功能,在视频播放时禁用了libvlc的消息处理机制,导致了enterEvent和leaveEvent事件失效。
解决方法:用mouseMoveEvent事件,计算视频播放的区域位置,当鼠标的位置在播放区域时即为进入。实现如下:
void MainWidget::mouseMoveEvent(QMouseEvent* event)
{
qDebug() << "mouseMoveEvent";
// 获取视频窗口的绝对位置
QPoint p1 = m_pVideoWidget->mapToGlobal(QPoint(0, 0));
QRect rect = m_pVideoWidget->rect();
// 绝对矩形区域
QRect rect2(p1.x(), p1.y(), rect.width(), rect.height());
// 鼠标的绝对位置
QPoint p2 = QCursor::pos();
if (m_isPlay)
{
if (rect2.contains(p2))
{
qDebug() << "in";
m_pVideoWidget->showTopWidget(true);
}
else
{
qDebug() << "out";
m_pVideoWidget->showTopWidget(false);//显示进度条的函数,自行定义
}
}
}