我使用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
答案 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()传递的消息。