如何使 QWidget 圆角
How to round QWidget corners
我想知道是否有办法使 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_())
你可以用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();
解决方案:
这是 hank 使用 C++ 概述的有效 Python 解决方案:
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_())
我想知道是否有办法使 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_())
你可以用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();
解决方案:
这是 hank 使用 C++ 概述的有效 Python 解决方案:
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_())