Qt實現圖片圓角
阿新 • • 發佈:2020-12-08
# 壓縮圖片為指定寬高 def scaled_pixmap(self, src, width, height): h = width if height == 0 else height return src.scaled(width, h, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) def generatePixmap(self, src, width, height, radius): # 無效圖片不處理 if src is None: return src # 壓縮圖片 pixmap = self.scaled_pixmap(src, width, height) dest = QPixmap(width, height) dest.fill(Qt.transparent) painter = QPainter(dest) # 抗鋸齒 + 平滑邊緣處理 painter.setRenderHints(QPainter.Antialiasing, True) painter.setRenderHints(QPainter.SmoothPixmapTransform, True) # 裁剪為圓角 path = QPainterPath() # path.addEllipse(0, 0, width, height) rect = QRectF(0, 0, width, height) path.addRoundedRect(rect, radius, radius) painter.setClipPath(path) painter.drawPixmap(0, 0, width, height, pixmap) return dest def set_in_thumb(self): w = self.img_thumb.width() h = self.img_thumb.height() if os.path.exists(self.data_obj.thumb_path): img = self.generatePixmap(QPixmap(self.data_obj.thumb_path), w, h, 4) self.img_thumb.setPixmap(img)