2016-02-11 138 views
2

enter image description here如何圓QWidget角落

我不知道是否有方法來Qt小部件的角落?

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_()) 
+0

你的問題的解決方案是屬於在一個答案中,而不是在問題中。鼓勵你爲自己的問題提供答案! –

+0

謝謝!下次將發佈它作爲答案。 – alphanumeric

+0

編輯系統的主要目的是可以修復中斷的內容:)隨意將答案部分複製粘貼到答案中,然後編輯問題以刪除答案。那就是我的意思。下次會太晚了:) –

回答

4

您可以使用QWidget.setMask(self, QRegion)

在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(); 
2

SOLUTION:

enter image description here

這裏是工作的Python溶液通過hank使用C++中概述:

import sys 
from PySide 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') 

     radius = 40.0 
     path = QtGui.QPainterPath() 
     self.resize(440,220) 
     path.addRoundedRect(QtCore.QRectF(self.rect()), radius, radius) 
     mask = QtGui.QRegion(path.toFillPolygon().toPolygon()) 
     self.setMask(mask) 
     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_())