(我正在使用PySide,但我认为任何语言绑定的答案都是相同/相似的)。
我正在尝试使用位于here的形状时钟示例,并使时钟(圆圈)的面部透明,以便我所看到的只是时钟指针和分钟刻度。实际上,当示例运行时,它看起来像this。我正在使用Windows 7。
到目前为止,我已经尝试了以下(在构造函数中):
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setAttribute(QtCore.Qt.WA_NoSystemBackground)
self.setWindowOpacity(0.5)
答案 0 :(得分:5)
如果我没记错的话,你也应该设置它的样式表:
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setStyleSheet("background:transparent;")
希望有所帮助。
答案 1 :(得分:4)
知道了!
这是来自原始示例代码(构造函数):
...
self.setWindowFlags(self.windowFlags() | QtCore.Qt.FramelessWindowHint)
...
以下是修改后的(并按我的问题工作)版本:
...
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
...
删除self.windowFlags()
是我失踪的部分。 (我不确定为什么我需要删除这个或为什么它开始时......还有很多要学习的东西。)
答案 2 :(得分:1)
是:
void ShapedClock::resizeEvent(QResizeEvent * /* event */)
{
int side = qMin(width(), height());
QRegion maskedRegion(width() / 2 - side / 2, height() / 2 - side / 2, side,
side, QRegion::Ellipse);
setMask(maskedRegion);
}
“setMask”做圆形
但在PySide中也是如此:
def resizeEvent(self, event):
side = min(self.width(), self.height())
maskedRegion = QtGui.QRegion(self.width()/2 - side/2, self.height()/2 - side/2, side, side, QtGui.QRegion.Ellipse)
self.setMask(maskedRegion)
所以它也应该有用吗?