Как создать тень у окна и сгладить углы у QWidget?

Необходимо создать форму с скругленными углами и тенью. Сейчас это реализовано так, пример ниже.

Но с Qt.FramelessWindowHint пропадает стандартная тень у формы и drawRoundedRect рисует очень пиксельные углы. Как возможно более сглажено их нарисовать? И как "руками" можно добавить тень? Т.к. форма без рамки должна быть, то часто сливается с нижними окнами.

class MyWindow(QtWidgets.QWidget):
    super(MyWindow, self).__init__()
    self.setWindowTitle('Icon')
    self.setWindowFlag(Qt.FramelessWindowHint)
    self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

    def paintEvent(self, ev):
        painter = QtGui.QPainter(self)
        painter.begin(self)
        painter.setBrush(QColor(255, 255, 255))
        painter.setPen(Qt.NoPen)
        painter.drawRoundedRect(self.rect(), 10.0, 10.0)
        painter.end()

Ответы (1 шт):

Автор решения: S. Nick

Как вариант:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class Container(QtWidgets.QWidget):
    def __init__(self, window, parent=None):
        super(Container, self).__init__(parent)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(window)
        lay.setContentsMargins(10, 10, 10, 10)
        shadow = QtWidgets.QGraphicsDropShadowEffect(self,
            blurRadius=9.0,
            color=QtGui.QColor(99, 255, 255),
            offset=QtCore.QPointF(8.0, 8.0)
        )
        window.setGraphicsEffect(shadow)

    def mousePressEvent(self, event):
        self.oldPos = event.globalPos()

    def mouseMoveEvent(self, event):
        delta = QtCore.QPoint (event.globalPos() - self.oldPos)
        self.move(self.x() + delta.x(), self.y() + delta.y())
        self.oldPos = event.globalPos()


class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Icon')
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

    def paintEvent(self, ev):
        painter = QtGui.QPainter(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing)        
        painter.setBrush(QtGui.QColor(195, 195, 255))
        painter.setPen(QtCore.Qt.NoPen)
        painter.drawRoundedRect(self.rect(), 10.0, 10.0)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    container = Container(w)
    container.resize(640, 480)
    container.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка