覆盖Phonon.VideoWidget的最佳做法是什么?

时间:2015-09-04 08:49:09

标签: python qt pyqt overlay phonon

最近几天,我试图找到一个有效的解决方案,用简单的QLabel覆盖Phonon.VideoWidget。可悲的是,我无法找到可行的解决方案。

以下是我的尝试:

  1. 育儿。我尝试了将QLabel解决到VideoWidget的“正常”育儿方法。结果:标签根本没有显示。

  2. QStackedLayout。正如这里建议的那样:http://www.qtcentre.org/threads/31490-Overlaying-Widgets-on-top-of-VideoWidget。结果:标签显示但始终位于视频后面

  3. GraphicsView。我在这里尝试了很多,因为它看起来最有希望,但最后CPU负载太高,所以视频没有播放。将视图的视口设置为QGLWidget并没有解决它。结果:覆盖有效,但由于CPU负载过高而无法播放视频。

  4. 对VideoWidget进行子类化。如上所述:https://wiki.qt.io/Overlay_widget_for_Phonon_VideoWidget。我采用相同的方法来创建叠加层。除了moveEvent之外,这个工作正常。如果标签在移动小部件完成后重新对齐,则看起来不太好。有没有办法在移动VideoWidget时更新这个?

  5. 我真的希望有人可以在这里帮助我(我使用PySide,但C ++中的示例应该也能正常工作)或者给我一个关于在哪里看的指针。如果我应该共享一些代码片段来重现,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以做的最好的事情是创建一个浮动在视频小部件上方的新窗口。例如,创建一个无父QLabel,并确保它与主窗口同步移动。

import scrapy

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.http import Request

class MySpider(CrawlSpider):
    name = 'alexa'
    allowed_domains = ['alexa.com']
    start_urls = ['http://www.alexa.com']
    retries = 0
    rules = (
        # Extract links matching 'category.php' (but not matching 'subsection.php')
        # and follow links from them (since no callback means follow=True by default).
        # Rule(LinkExtractor(allow=('topsites', ))),

        # Extract links matching 'item.php' and parse them with the spider's method parse_item
        Rule(LinkExtractor(allow=('topsites', )), callback='parse_page1'),
    )

    def parse_page1(self, response):
        if self.retries < 5:
            self.retries += 1
            print 'Retries in 1: ', self.retries
            return scrapy.Request("http://www.alexa.com/siteieekeknfo/google.com",
                                 meta={'dont_merge_cookies': True,
                                'dont_redirect': False,
                                "handle_httpstatus_list": [301, 302, 303, 404]},
                               callback=self.parse_page2)
        else:
            print "Finished in 1"

    def parse_page2(self, response):
        if self.retries < 5:
            self.retries += 1
            print 'Retries in 2: ', self.retries
            return scrapy.Request("http://www.alexa.com/siteieekeknfo/google.com",
                                 meta={'dont_merge_cookies': True,
                                'dont_redirect': False,
                                "handle_httpstatus_list": [301, 302, 303, 404]},
                               callback=self.parse_page1)
        else:
            print "Finished in 2"

在QMainWindow子类中,重写moveEvent和resizeEvent并执行以下操作:

label = new QLabel();
label->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);

这会将标签保留在左下角,根据您的需要进行更改。