Virtuální metody

V předcházejícím příkladu jsme na různé události reagovali pomocí metod připojených Qt funkcí connect.
Zkusme si nyní předefinovat nějakou virtuální metodu deklarovanou v nadřazené třídě.

virtuální metoda pro vykreslení vnořeného okénka

Metoda paintEvent je ve třídě QWidget deklarovaná jako virtuální. Tato metoda je volána v okamžiku, kdy se má okno vykreslit na obrazovku.

Naše třída Widget je odvozena od třídy QWidget.
V naší třídě si předefinujeme metodu paintEvent tak, aby kreslila barevný obdélník.
Využijeme k tomu objekt typy QPainter, který má vhodné metody pro kreslení.

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
 
class Widget (QWidget) :
 
    def __init__ (self) :
        super().__init__()
 
    def color (self, painter, r, g, b) :
        painter.setPen (QColor.fromRgb (r, g, b))
 
    def line (self, painter, x1, y1, x2, y2) :
        painter.drawLine (x1, y1, x2, y2)
 
    def paintEvent (self, event) : # QPaintEvent *event
        p = QPainter ()
        p.begin (self)
 
        w = self.width ()
        h = self.height ()
 
        self.color (p, 255, 0, 0)
        self.line  (p, 0, 0, w-1, 0)
 
        self.color (p, 0, 255, 0)
        self.line  (p, w-1, 0, w-1, h-1)
 
        self.color (p, 0, 0, 255)
        self.line  (p, w-1, h-1, 0, h-1)
 
        self.color (p, 255, 200, 0)
        self.line  (p, 0, h-1, 0, 0)
 
        p.end ()
 
if __name__ == "__main__" :
    app = QApplication (sys.argv)
    win = Widget ()
    win.show ()
    sys.exit (app.exec_())

Dokumentaci k jednotlivým metodám třídy QPainter naleznete na https://doc.qt.io/qt-5/qpainter.html

 
uop/paint.txt · Last modified: 2020/10/26 13:33 by 88.103.111.44
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki