QT使用图片为窗口设置遮罩,创建不规则形状的窗口

  1. 准备一张透明背景色的图片,将图片添加到qt的资源文件中

2.使用QPixmap加载图片,设置窗口的大小为图片的大小,并为窗口设置遮罩

   QPixmap pix;
    //加载图片
    pix.load(":/image/yafeilinux.png");
    //设置窗口大小为图片大小
    resize(pix.size());
    //为窗口设置遮罩
    setMask(pix.mask());
  •  重写绘图事件将图片绘制在窗口上
  • 
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        //从窗口左上角开始绘制图片
        painter.drawPixmap(0,0,QPixmap(":/image/yafeilinux.png"));
    
    }

    关于遮罩函数mask(),还想了解更多,可以在帮助文档中搜索QWidget下的setMask()

  • setMask()有很多重写的函数

  • void QWidget::setMask(const QRegion &region),可以对窗口的一个区域进行遮罩,仅使窗口小部件中重叠区域的部分可见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 PySide6 中的 QWindow.setMask() 方法来设置窗口遮罩遮罩可以用于定义窗口形状,使其只显示指定区域内的内容,其他区域将被遮挡。以下是一个示例代码,演示如何创建一个圆形窗口遮罩: ```python from PySide6.QtWidgets import QApplication, QMainWindow from PySide6.QtCore import Qt from PySide6.QtGui import QPainter, QRegion class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowFlags(Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground) def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) mask_region = QRegion(self.rect(), QRegion.Ellipse) mask_region -= QRegion(self.width() // 4, self.height() // 4, self.width() // 2, self.height() // 2) self.setMask(mask_region) # 创建应用程序对象 app = QApplication([]) window = MyWindow() window.show() # 运行应用程序 app.exec() ``` 在这个示例中,我们创建了一个自定义的窗口类 `MyWindow`,继承自 `QMainWindow`。在构造函数中,我们设置窗口的标志位 `Qt.FramelessWindowHint`,以及属性 `Qt.WA_TranslucentBackground`,以使窗口无边框且透明。 然后,我们重写了 `paintEvent()` 方法,在其中使用 `QPainter` 绘制窗口的内容。通过创建一个 `QRegion` 对象来定义窗口遮罩区域,这里我们使用一个圆形区域,并将其应用为窗口遮罩。 最后,我们创建了应用程序对象,实例化我们的自定义窗口类,并显示窗口。调用 `app.exec()` 运行应用程序。 您可以根据需要修改遮罩形状和位置,以实现不同的效果。希望这可以帮助到您!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值