目标
我希望我的基于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在播放视频的情况下放置小部件。
谢谢!