CentOS下Qt窗口透明效果失效,成黑色背景的问题

一、问题

       Linux系统下Qt窗口的透明效果成了黑色,但同样的代码在windows机子上有透明效果,主要是修改系统的配置,仅在centos6.3及其以上版本实验过。其他系统可以相应配置。

 

二、问题运行图

 

 

 

(1)Qt透明效果,centos下运行都会出现如下图1所示。

 

 

 

 

三、解决方法

 

 

 

(1)窗口透明,窗口上的控件不透明,其代码设置

 

    setAutoFillBackground(false);  //这个不设置的话就背景变黑
    setWindowFlags(Qt::FramelessWindowHint);
    setAttribute(Qt::WA_TranslucentBackground,true);
    //setWindowOpacity(1);  //窗口及控件都半透明,其取值为0-1(0是全透明,1是不透明)
    //setAttribute(Qt::WA_NoSystemBackground, true);
    //setStyleSheet("background-color:transparent;");
    //QWidget::setAttribute(Qt::WA_NoBackground, true);
    //QPalette pal = palette(); 
    //pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); 
    //setPalette(pal);

(2)Qt参考文档

 

 

 

Platform notes:

  • X11: This feature relies on the use of an X server that supports ARGB visuals and a compositing window manager.
  • Windows: The widget needs to have the Qt::FramelessWindowHintwindow flag set for the translucency to work.

平台注意事项:

       X11(linux):此特性依赖于能提供支持ARGB视觉效果和复合式视窗管的X服务的功能开启。

       Windows:此控件需要设置窗口标志Qt::FramelessWindowHint才能开启透明功能。

接着修改Centos的配置,是透明效果生效。

(3)修改Centos配置

进入菜单栏的系统->首选项->桌面效果
修改为Complz,不过修改后系统会变得稍微有些卡,太耗内存了。
改动后的效果(透明)(截图的背景色是白色):

from PyQt5.QtCore import Qt from PyQt5.QtGui import QBrush, QPainter from PyQt5.QtWidgets import QDialog, QPushButton from PyQt5 import QtWidgets class RoundCornerDialog(QDialog): def __init__(self): super().__init__() self.setAttribute(Qt.WA_TranslucentBackground) # 启用透明通道 self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint) # 去掉系统边框 self.setAttribute(Qt.WA_NoSystemBackground) # 禁用系统背景 self.setFixedSize(320, 150) # 确认按钮 self.confirm_btn = QPushButton("确认", self) self.confirm_btn.setFixedSize(80, 30) self.confirm_btn.clicked.connect(self.accept) self.confirm_btn.move(self.width() - 90, self.height() - 40) # 按钮样式 self.confirm_btn.setStyleSheet(""" QPushButton { background-color: #555555; color: white; border-radius: 5px; font-size: 14px; } QPushButton:hover { background-color: #666666; } QPushButton:pressed { background-color: #444444; } """) def paintEvent(self, event): # 创建透明画刷(关键修改) painter = QPainter(self) # 必须设置抗锯齿才能平滑透明边缘 painter.setRenderHint(QPainter.Antialiasing, True) # 设置透明填充(替代原来的红色画刷) painter.setBrush(QBrush(Qt.transparent)) # 核心修改点 # 保持透明边框设置 painter.setPen(Qt.transparent) # 获取调整后的矩形区域 rect = self.rect() rect.setWidth(rect.width() - 1) rect.setHeight(rect.height() - 1) # 绘制透明背景的圆角矩形 painter.drawRoundedRect(rect, 15, 15) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) dialog = RoundCornerDialog() dialog.show() sys.exit(app.exec_())在Windows系统上是透明背景,但是在liunx系统上运行是黑色背景
最新发布
04-08
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌托邦2号

博文不易,支持的请给予小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值