1. Wykonaj własny widget
Oczywiście można rysunek wykonać bezpośrednio na powierzchni własnej klasy MainWindow jednak w ten sposób traci się przejrzystość, ponieważ MainWindow musi obsługiwać rysowanie szachownicy. Co więcej gdybyśmy w przyszłości chcieli na ekranie przedstawić kilka szachownic to dla każdej sztuki musielibyśmy pisać na nowo kod w MainWindow. Dodatkowo trwając w tym sposobie nie mielibyśmy możliwości użycia szachownicy w Qt Designerze.
Jak wykonać własny widget?
W tym celu przeczytaj ten artykuł: "Własny widget w Qt Jambi"
2. Implementacja własnego widgetu
W tym zadaniu podstawowym celem jest nadpisanie metody:
protected void paintEvent(QPaintEvent e)
w trakcie działania aplikacji nie musisz jej wywoływać ponieważ tym zajmują się mechanizmy Qt.
3. Aby rysować niezbędne jest narzędzie rysownicze.
painter = new QPainter(this);
4. Jeżeli chcemy, aby narzędzie rysownicze używało antialisingu
Używamy tych instrukcji:
// wobec rysowania, prostych, figur itp
painter.setRenderHint(QPainter.RenderHint.Antialiasing);
// wobec rysowania tekstu
painter.setRenderHint(QPainter.RenderHint.TextAntialiasing);
5. Jeżeli chcemy zmienić kolor jaki używa narzędzie to w tym celu tworzymy pisak, i wstawiamy go do narzędzia.
QPen pen = new QPen(QColor.red);
painter.setPen(pen);
6. Jeżeli chcemy narysować tekst w tym celu dokonujemy takiej instrukcji.
// zarówno x jak i y są typu int, messageLine jest typu String (dla C++ jest typu QString)
painter.drawText(x, y, messageLine1);
7. Jeżeli chcemy narysować prostokąt używamy takiej instrukcji:
// x, y współrzędne
// fieldWidth szerokość
// fieldHeight wysokość
// QColor.black kolor
painter.fillRect(x, y, fieldWidth, fieldHeight, QColor.black)
8. Jeżeli chcemy rysować inne figury zalecam spojrzeć na stronę:
http://doc.qt.nokia.com/4.6/qpainter.html
Metody rysujące rozpoczynają się słowem "draw"
9. Aby narysować szachownice wykonuje się właściwie dwie rzeczy:
1. pierw ustawić tło widgetu na białe
2. narysować czarne kwadraty za pomocą podwójnej pętli
Teraz przeanalizuj kod. Algorytm jest zapisany w języku Java, jednak jest czytalny i łatwo go dostosować do C++.
Brak komentarzy:
Prześlij komentarz