目标
我希望基于 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 和 friend 一起工作,不同的布局堆栈,相关小部件的不同属性等等。我最后的尝试是将 QVideoWidget 的父级设置为 QGLWidget() 的实例,希望强制硬件加速能够解决我的问题(我的计算机具有带二进制驱动程序的硬件 3d 加速)。这完全阻止了窗口的出现,而我仍然可以听到后台播放的视频配乐表明应用程序仍在运行。
请求
我真的希望那里有一些善良而聪明的 QT5 开发人员可以帮助我实现我的梦想,即在 Ubuntu 上的 QT5 中将小部件放置在播放视频的顶部。
谢谢!
最佳答案
我知道这是一个老问题,您通过将部分应用程序转换为 QML/QtQuick 2.2 设法解决了您的问题,但我最终通过谷歌搜索遇到了这个问题,遇到同样问题的其他人也可能会找到这个问题。我找到了一个适合我的解决方案,并且已经在带有 QT 5.3 的 Windows 上进行了测试。
我所做的是使用 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 位于图形 View 之上。
然后,当我播放视频时,我调用 ui->playerScreen-show()。我只在播放时这样做,因为我在顶部有另一个屏幕(用于与我的项目相关的其他内容),并且我需要在使用/不使用视频时调用显示/隐藏 :)
如果您需要有关我的代码的更多信息,请告诉我。
关于c++ - 在 Ubuntu 上的 QT5 中将透明 QWidget 放在 QMediaView 之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16889319/
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主