python qt,在另一个小部件(声子)上方显示文本/标签

发布于 2024-09-18 17:12:44 字数 122 浏览 5 评论 0原文

我正在使用 PySide 制作一个视频播放器,它是与 Qt 框架的 python 绑定。我正在使用声子(一个模块)来显示视频,我想在视频上方显示文本作为字幕。如何在我的声子小部件上方放置另一个小部件。 opengl 是一个选项吗?

I'm making a video player using PySide which is a python bind to the Qt framework. I'm using phonon(a module) to display the video and I want to display text above the video as a subtitle. How can I put another widget above my phonon widget. Is opengl an option?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泡沫很甜 2024-09-25 17:12:44

如果您只是创建标签并将声子小部件设置为父级,则标签应显示在其上方。

QLabel *label = new QLabel(phononWidget);
label->setText("Text over video!");

(我知道这是 C++,而您正在使用 Python,但它应该类似)

更新:
以上不适用于硬件加速视频播放。另一种可行的方法是创建一个图形场景,并将视频小部件或播放器添加到场景中,并使用 QGraphicsTextItem 作为文本。将视口设置为 QGLWidget 将启用硬件加速:

QGraphicsScene *scene = new QGraphicsScene(this);

Phonon::VideoPlayer *v = new Phonon::VideoPlayer();
v->load(Phonon::MediaSource("video_file"));

QGraphicsProxyWidget *pvideoWidget = scene->addWidget(v);

QGraphicsView *view = new QGraphicsView(scene);
view->setViewport(new QGLWidget); //Enable hardware acceleration!

QGraphicsTextItem *label = new QGraphicsTextItem("Text Over Video!", pvideoWidget);
label->moveBy(100, 100);

v->play();

If you just create your label and set the phonon widget as the parent, the label should appear over it.

QLabel *label = new QLabel(phononWidget);
label->setText("Text over video!");

(I realize this is C++ and you are working in Python but it should be similar)

Update:
The above will not work for hardware accelerated video playback. An alternative that does work is to create a graphics scene and add the video widget or player to the scene and use a QGraphicsTextItem for the text. Setting the viewport to a QGLWidget will enable hardware acceleration:

QGraphicsScene *scene = new QGraphicsScene(this);

Phonon::VideoPlayer *v = new Phonon::VideoPlayer();
v->load(Phonon::MediaSource("video_file"));

QGraphicsProxyWidget *pvideoWidget = scene->addWidget(v);

QGraphicsView *view = new QGraphicsView(scene);
view->setViewport(new QGLWidget); //Enable hardware acceleration!

QGraphicsTextItem *label = new QGraphicsTextItem("Text Over Video!", pvideoWidget);
label->moveBy(100, 100);

v->play();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文