Search code examples
pythonqtpyqtpyside

How to round QWidget corners


enter image description here

I wonder if there is there a way to round Qt widget corners?

from PyQt4 import QtCore, QtGui

class Custom(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        QtGui.QWidget.__init__(self, *args, **kwargs)
        self.setWindowOpacity(0.9)
        self.setWindowFlags(QtCore.Qt.Popup|QtCore.Qt.FramelessWindowHint)
        self.setWindowTitle('Custom')
        self.resize(440,220)
        self.move(QtGui.QCursor.pos())

    def closeEvent(self, event):
        event.accept()
        sys.exit(app.exec_())

    def mousePressEvent(self, event):
        self.close() 

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    w = Custom()
    w.show()
    sys.exit(app.exec_())

Solution

  • You can use QWidget.setMask(self, QRegion) for it.

    An example in C++:

    QWidget *widget = new QWidget;
    widget->resize(300, 200);
    
    const int radius = 10;
    
    QPainterPath path;
    path.addRoundedRect(widget->rect(), radius, radius);
    QRegion mask = QRegion(path.toFillPolygon().toPolygon());
    widget->setMask(mask);
    
    widget->show();