c – 在Ubuntu的QT5中将透明QWidget置于QMediaView之上
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 在Ubuntu的QT5中将透明QWidget置于QMediaView之上,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2437字,纯文字阅读大概需要4分钟。
内容图文
![c – 在Ubuntu的QT5中将透明QWidget置于QMediaView之上](/upload/InfoBanner/zyjiaocheng/951/dc951498c81248278499d692929a0736.jpg)
目标
我希望基于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();
}
按钮位于播放视频的顶部,这很好.但仔细观察,您会在按钮的角落看到一些黑色像素,表示它在视频上不透明,但呈现为不透明的矩形.
第二次尝试
我尝试用背景设置样式:透明; (参见上面代码中的注释行).这使按钮的背景透明,但按钮后面的黑框现在更加明显.
其他尝试
我已经在线阅读了几个关于如何做到这一点的技巧.没有人对我有用.我曾尝试使用QGraphicsScene和朋友,不同的布局堆栈,有问题的小部件上的不同属性等等.我的最后一次尝试是将QVideoWidget的父级设置为QGLWidget()的实例,希望强制硬件加速能解决我的问题(我的计算机具有带二进制驱动程序的硬件3d加速).这只是让窗口完全无法显示,而我仍然可以听到背景中播放的视频的音轨,表明应用程序仍在运行.
请求
我真的希望有一些善良和聪明的QT5开发人员可以帮助我实现我的梦想,即在Ubuntu的QT5中播放视频的小部件.
谢谢!
解决方法:
我知道这是一个老问题,你设法通过将你的应用程序的部分转换为QML / QtQuick 2.2来解决你的问题,但我最终通过谷歌搜索碰到了它,而其他有相同问题的人也可能会发现这个问题.我找到了一个适用于我的解决方案,并已在Windows上使用QT 5.3进行了测试.
我所做的是使用QGraphicsView来显示视频.这是我的代码(playerScreen是QGraphicsView):
QGraphicsVideoItem *item = new QGraphicsVideoItem;
item->setSize(ui->playerScreen->size());
player.reset(new QMediaPlayer());
player->setVideoOutput(item);
QGraphicsScene *scene = new QGraphicsScene(0, 0, ui->playerScreen->size().width(), ui->playerScreen->size().height());
ui->playerScreen->setScene(scene);
ui->playerScreen->scene()->addItem(item);
我禁用了playerScreen上的滚动条,否则会有水平和垂直滚动条.
我在playerScreen的顶部有一个QWidget,我用QPainter绘制. QWidget位于图形视图的顶部.
然后,当我播放视频时,我会调用ui-> gt; playerScreen-show().我只在游戏中这样做,因为我在顶部有另一个屏幕(对于与我的项目相关的另一个东西),我需要在使用/不使用视频时调用show / hide
内容总结
以上是互联网集市为您收集整理的c – 在Ubuntu的QT5中将透明QWidget置于QMediaView之上全部内容,希望文章能够帮你解决c – 在Ubuntu的QT5中将透明QWidget置于QMediaView之上所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。