在过去的几天里,我试图找到一个有效的解决方案来覆盖声子。VideoWidget与一个简单的QLabel。遗憾的是,我没能找到一个有效的解决方案。
这是我尝试过的:
-
育儿。我尝试了"正常"的育儿方式,将QLabel定位到VideoWidget。结果:标签根本不显示
-
QStackedLayout。这里建议:http://www.qtcentre.org/threads/31490-Overlaying-Widgets-on-top-of-VideoWidget。结果:标签显示,但总是在视频后面
-
GraphicsView。我在这里尝试了很多,因为它看起来是最有希望的,但最后CPU负载太高,所以视频无法播放。将视图的视口设置为QGLWidget并不能解决这个问题。
结果:覆盖工作,但由于CPU负载高而无法播放视频。 子类化VideoWidget。正如这里提到的:https://wiki.qt.io/Overlay_widget_for_Phonon_VideoWidget。我用同样的方法来创建叠加。除了moveEvent之外,这工作得很好。如果在完成移动小部件之后重新对齐标签,看起来就不太好了。是否有一种方法来更新这已经当移动VideoWidget?
我真的希望有人能在这里帮助我(我使用PySide,但在C++的例子也应该工作)或给我一个指针在哪里看。请让我知道如果我应该分享一些代码片段复制。
你能做的最好的就是创建一个漂浮在视频小部件上方的新窗口。例如,创建一个无父的QLabel,并确保它与主窗口同步移动。
label = new QLabel();
label->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
在你的QMainWindow子类中,重写moveEvent和resizeEvent,并做一些类似的事情:
label->move(mapToGlobal(QPoint(0, height() - label->height())));
这使标签在左下角,改变它,以满足您的需要。