请教:如何在QLabel::winId上层透明显示工具栏?

csrealsil 2010-03-10 11:52:41
本人在Linux下做一个视频预览工具,主要用QLabel::winID()嵌入别人提供的winow ID 显示gstreamer传来的视频。
现在要在视频前加一个透明显示下面一层视频的工具栏,于是用setStyleSheet("background-image:url(./images/translucent.png)") 给工具栏加载了一幅透明图片。可以肯定的是当后面不显示视频而用QLabel->setPixmap()显示图片的时候, 工具栏是透明的,可以显示底层的图片。
但如果用QLabel::winID()显示视频的时候,工具栏就没有这样的效果,总会出来默认的灰色。因此我怀疑是winID()和普通控件的显示机制不同所致。如果这样的话,用什么方法可以在显示winID视频的时候,工具栏透明。
希望高手给点意见,多谢!
...全文
343 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
operatezhang 2010-03-12
  • 打赏
  • 举报
回复
好像没有遇到过额!!!
MicroSky2813 2010-03-10
  • 打赏
  • 举报
回复
工具栏使用QLabel重写下可能可以.

底层一点
QWidget paintEvent 自己可以画出镂空的效果,嵌入PNG不知道能不等达到你要的效果
\qt\examples\widgets\shapedclock
csrealsil 2010-03-10
  • 打赏
  • 举报
回复
setAttribute , setAutoFillBackground 和 setPalette 方法已经试过,好像没有效果。
csrealsil 2010-03-10
  • 打赏
  • 举报
回复
多谢,减慢刷新速度的确解决了闪烁的原因
但还是不能透明,默认的为灰色
MicroSky2813 2010-03-10
  • 打赏
  • 举报
回复
闪烁是你刷新太快了,减慢下刷新的速度
csrealsil 2010-03-10
  • 打赏
  • 举报
回复
在paitEvent用法如下也不行,而且还会出现闪烁的现象。
void paintEvent( QPaintEvent * event)
{
QPixmap temp(toolBarPixmap.size());
temp.fill(Qt::transparent);
QPainter p( &temp );
p.setCompositionMode(QPainter::CompositionMode_Source);
p.drawPixmap(0, 0, toolBarPixmap);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.fillRect(temp.rect(),QColor(0,0,0,125));
tempLabel->setPixmap(temp);
}
csrealsil 2010-03-10
  • 打赏
  • 举报
回复
在paitEvent用法如下也不行,而且还会出现闪烁的现象。
[code={0}]
void paintEvent( QPaintEvent * event)
{
QPixmap temp(toolBarPixmap.size());
temp.fill(Qt::transparent);
QPainter p( &temp );
p.setCompositionMode(QPainter::CompositionMode_Source);
p.drawPixmap(0, 0, toolBarPixmap);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.fillRect(temp.rect(),QColor(0,0,0,125));
tempLabel->setPixmap(temp);
}
[/code]

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧