重写QVideoWidget的paintEvent()函数可以在绘制视频画面之前绘制其他控件,具体步骤如下:
新建一个类,继承自QVideoWidget。
在该类中重写paintEvent()函数,先调用父类的paintEvent()函数,再在其上绘制其他控件。
在主窗口中使用该类创建视频播放器,并设置视频画面为全屏显示,以保证其他控件能够正常显示。
代码示例:
#include <QtWidgets>
class VideoWidget : public QVideoWidget
{
public:
VideoWidget(QWidget *parent = nullptr) : QVideoWidget(parent)
{
// 设置背景色
setStyleSheet("background-color: black;");
}
protected:
void paintEvent(QPaintEvent *event) override
{
// 调用父类的paintEvent()函数
QVideoWidget::paintEvent(event);
QPainter painter(this);
painter.setPen(Qt::white);
// 在视频画面上绘制文本
painter.drawText(rect(), Qt::AlignCenter, "Custom Control");
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建视频播放器并设置视频画面为全屏显示
QMediaPlayer player;
VideoWidget videoWidget;
player.setVideoOutput(&videoWidget);
videoWidget.showFullScreen();
// 加载视频文件并开始播放
player.setMedia(QUrl::fromLocalFile("/path/to/video.mp4"));
player.play();
return app.exec();
}