QSplashScreen.setPixmap将Splashscreen移回默认位置

时间:2018-04-11 11:19:38

标签: python qt5 pyqt5 qpixmap qsplashscreen

我使用QSplashScreen创建了QPixmap并将其移至第二台显示器的中心(而非默认显示器):

private static Stack<int> DoMagic(int[] a, Stack<int> b)
{
    var c = new Stack<int>();
    foreach (int val in a)
        c.Push(b.ElementAt(val-1));
    return c;
}

我现在正在尝试向我的pixmap添加内容,同时显示SplashScreen:

class SplashScreen(QSplashScreen):
  def __init__(self):
    self._pixmap = QPixmap("test1.png")
    super(SplashScreen, self).__init__(self._pixmap)

    screen = 1
    scr = qApp.desktop().screenGeometry(screen)
    self.move(scr.center() - self.rect().center()) # move to second screen

似乎用于创建QSplashScreen的QPixmap已被复制,并且不再具有相同的引用,因此对此的更改没有直接影响。

此外,使用setPixmap()将SplashScreen移回默认监视器。

是否可以选择直接在Splashscreen的活动QPixmap上绘制,或者设置一个新的而不需要再次移动屏幕?

(使用move-command并不是一个很好的选择,当你在短时间内快速重绘时 - 闪屏然后在两个显示器上闪烁)

用法示例:

  def drawSomething(self):
    add = QPixmap('test2.png')
    painter = QPainter(self._pixmap)
    painter.drawPixmap(0,0, add)
    #nothing happing so far
    self.repaint() # nothing happening
    self.setPixmap(self._pixmap) # changes shown, but moved back to default-screen

2 个答案:

答案 0 :(得分:1)

您应该重新简化drawContents函数以在QSplashScreen QPixmap上执行绘制。

答案 1 :(得分:0)

我终于在QPainter上使用self重新实现了paintEvent

def paintEvent(self, *args, **kwargs):
    painter = QPainter(self)
    pixmap = QPixmap('test2.png')
    #self.setMask(pixmap.mask()) # optional for transparency painting
    painter.drawPixmap(0,0, pixmap)

然而,重新实现drawContents功能like S.Monteleone suggested也很好:

def drawContents(self, painter):
    painter.drawPixmap(0,0, QPixmap('test2.png'))
    super(SplashScreen, self).drawContents(painter)

请记住,在绘画之后还要调用super,以免在QSplashScreen上丢失messages shown的图形。

  

默认实现绘制showMessage()传递的消息。