qt 子窗体透明 不受父窗体背景影响 播放视频

68 篇文章 11 订阅

使用qt版本 qt5.11.0 windows10 平台

设置子窗体透明的方式很多。但是很多方式在有些情况下效果却很糟。

如果父窗体上播放视频操作,或其他有修改窗体swichbuffer的行为时,透明效果需要做点小操作。

1、首先如果希望透明子窗体要时时刻刻在父窗体上显示,需要继承父窗体指针,再调用raise()。
2、让父窗体不影响子窗体,需要修改窗体flag值。Qt窗体类型有三种,一种是Qt::widget,一种是Qt::dialog,一种是Qt::window ,widget 会强制使用父窗体背景,所以会选择Dilog或window flag。
3、WindowstaysOnTopHint会让窗体一直保持在最上面。如果不继承父窗体, 则会一直在最上面。并且需要设置SubWindow flag,才能保证在任务栏上该程序只显示一个图标。

m_videoController  = new VideoController(this);
m_videoController->setWindowFlags(Qt::FramelessWindowHint|Qt::Dialog);
m_videoController->setAttribute(Qt::WA_TranslucentBackground, true);
m_videoController->show();
//QPalette pal;​
//pal.setColor(QPalette::Background,QColor(90,90,90,90));
//m_videoController->setAutoFillBackground(true);
//m_videoController->setPalette(pal);​
m_color = QColor(0,0,0,1);//全透无法响应鼠标事件。


解释: 上面setAttribute WA_TranslucentBackground 为true,表示子窗口透明时不会考虑父窗口,否则底层会将父窗口原始的framebuffer中的像素作为结果显示,而不是自己设置的颜色。

 

4、再重载透明子widget的paintevent(Qpaintevent *e)

void VideoController::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.fillRect(this->rect(), m_color);
}

这样子窗体就能透明了。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值