目标
我希望基于 QT5 的 GUI 的背景是正在播放的视频文件。我还希望能够为我的 GUI 组件设置透明样式,以便视频可以通过它们显示。
我不确定这是否有可能实现。可能是我刚刚错过了一个重要线索(我毕竟是 Qt 初学者),也可能是它根本不适合工作。但作为一个乐观主义者,我已经尽了最大努力。
第一次尝试
我最小的第一次尝试是这样的:
int main( int argc, char **argv ){
QApplication app(argc, argv);
QMediaPlayer *media=new QMediaPlayer(0);
QVideoWidget *video=new QVideoWidget(0); //new QGLWidget()
media->setVideoOutput(video);
media->setMedia(QUrl::fromLocalFile("/tmp/avatar.mp4"));
media->setPosition(3000000);
media->play();
QPushButton *pb=new QPushButton(video);
pb->setText(QString("BOB"));
//pb->setStyleSheet(QString("background:transparent;"));
video->show();
return app.exec();
}
该按钮位于播放视频的顶部,这很好。但是如果你仔细观察,你会在按钮的角落看到一些黑色像素,表明它在视频中不是透明的,而是呈现为一个不透明的矩形。
第二次尝试
我尝试使用background:transparent;
(参见上面代码中的注释行)设置按钮的样式。这使得按钮的背景透明,但按钮后面的黑框现在更加明显。
其他尝试
我已经从网上的各种来源阅读了一些关于如何做到这一点的提示。没有一个对我有用。我尝试过与 QGraphicsScene 和朋友一起工作,不同的布局堆栈,有问题的小部件上的不同属性等等。我最后一次尝试是将 QVideoWidget 的父级设置为 QGLWidget() 的一个实例,希望强制硬件加速能够解决我的问题(我的计算机具有带二进制驱动程序的硬件 3d 加速)。这只是完全阻止了窗口出现,而我仍然可以听到在后台播放的视频的配乐,表明应用程序仍在运行。
要求
我真的希望有一些善良和聪明的 QT5 开发人员可以帮助我实现我的梦想,即在 Ubuntu 上的 QT5 中将小部件放置在播放视频的顶部。
谢谢!