最近几天,我试图找到一个有效的解决方案,用简单的QLabel覆盖Phonon.VideoWidget。可悲的是,我无法找到可行的解决方案。
以下是我的尝试:
育儿。我尝试了将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 ++中的示例应该也能正常工作)或者给我一个关于在哪里看的指针。如果我应该共享一些代码片段来重现,请告诉我。
答案 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);
这会将标签保留在左下角,根据您的需要进行更改。