透明背景的Qt小部件

2024-05-27 11:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

(我正在使用PySide,但我认为对于任何语言绑定,答案都是相同/相似的)。

我试图以位于here的成型时钟为例,使时钟(圆)的表面透明,这样我所看到的就是时钟指针和时钟滴答声。同样,当示例运行时,它看起来像this。我在用Windows7。

到目前为止,我已经尝试了以下操作(在构造函数中):

  • self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
    • 时钟出现(任务栏中有显示),但我在任何地方都看不到它
  • self.setAttribute(QtCore.Qt.WA_NoSystemBackground)
    • 时钟出现,但有实心黑色背景。
  • self.setWindowOpacity(0.5)
    • 时钟出现,但整个时钟是透明的。我希望背景(脸)是透明的,但我希望时钟指针是可见的。

Tags: 答案self语言示例here时钟qt表面
3条回答

明白了!

这来自原始示例代码(构造函数):

    ...
    self.setWindowFlags(self.windowFlags() | QtCore.Qt.FramelessWindowHint)
    ...

以下是修改后的(根据我的问题)版本:

    ...
    self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
    self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
    ...

删除self.windowFlags()是我缺少的部分。(我不确定为什么我需要删除这个,也不知道为什么它会出现。。。还有很多要学)。

如果我没记错的话,您应该设置它的样式表:

self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setStyleSheet("background:transparent;")

希望能有所帮助。

在时钟示例中是:

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)

所以它也应该起作用?

相关问题 更多 >

    热门问题