LINUX.ORG.RU

Портирование qt3/exmaples/tux на qt4


0

0

Привет, столкнулся с проблемой портирования замечательного примера tux с qt3 на qt4. Почитал гугл, ответа не нашел, проблем много но основная это то что не грузиться картинка нормально в бэкграунд окна, привожу код на питоне.

qt3:
#!/usr/bin/env python

import sys
from qt import *

class Tux(QWidget):
def __init__(self,parent=None,name=None,f=0):
QWidget.__init__(self)
#self.setWFlags(f)

def main(argv):
app = QApplication(argv)

fn = QString("tux.png")

if not QFile.exists(fn):
sys.exit(1)

img = QImage(fn)
p = QPixmap()

p.convertFromImage(img)

if not p.mask():
if img.hasAlphaBuffer():
bm = QBitmap()
bm = img.createAlphaMask()
p.setMask(bm)
else:
bm = QBitmap()
bm = img.createHeuristicMask()
p.setMask(bm)

w = Tux(0,0,Qt.WStyle_Customize|Qt.WStyle_NoBorder)
w.setPaletteBackgroundPixmap(p)
w.setFixedSize(p.size())

if p.mask():
w.setMask(p.mask())

w.show()

app.setMainWidget(w)

app.exec_loop()

if __name__ == "__main__":
main(sys.argv)


Далее код на qt4:
#!/usr/bin/env python

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Tux(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self,parent)

def main(argv):
app = QApplication(argv)

fn = QString("tux.png")

if not QFile.exists(fn):
sys.exit(1)

img = QImage(fn)
p = QPixmap()

p.fromImage(img) # возможно проблема здесь

if not p.mask():
if img.hasAlphaBuffer():
bm = QBitmap()
bm = img.createAlphaMask()
p.setMask(bm)
else:
bm = QBitmap()
bm = img.createHeuristicMask()
p.setMask(bm)

w = Tux()
palette = QPalette()
palette.setBrush(w.backgroundRole(), QBrush(p))
w.setPalette(palette)
#w.setFixedSize(p.size())

if p.mask():
w.setMask(p.mask())

w.show()

sys.exit(app.exec_())


if __name__ == "__main__":
main(sys.argv)

Очень интересует создания окошка произвольной формы, не писать же на третьем qt изза этого.

★★★

Ответ на: комментарий от alt0v14

разобрался, вопрос снят можно без прослойки QImage напрямую картинку грузить в QPixmap, тогда все нормально

alt0v14 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.