1. Varför kommer jag till MyWidget::paintEvent() utan något explicit anrop utförs?
2. Varför anropas MyWidget::paintEvent() 2ggr?
(Koden är egentligen skriven för att jag inte fattade hur drawPies parametar fungerade i fönstret. Det gör fortfarande inte men verkar kunna hantera ändå)
Utskrift:
Kod: Markera allt
MyWidget constructor
windowTitle @paintEvent: Viewport object A
width(): 500 height():
rect.x(): 50 50 200 200
wind.x(): -100 -100 200 200
windowTitle @paintEvent: Viewport object A
width(): 500 height():
rect.x(): 50 50 200 200
wind.x(): -100 -100 200 200
Kod: Markera allt
######################################################################
# Automatically generated by qmake (2.01a) tir. sep. 8 11:39:19 2020
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
OBJECTS_DIR = obj
MOC_DIR = moc
RCC_DIR = rcc
# Input
HEADERS += viewport.h
SOURCES += main.cpp viewport.cpp
Kod: Markera allt
#include <QApplication>
#include "viewport.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget mywidget(0, 500, 500);
mywidget.setWindowTitle(QObject::tr("Viewport object A"));
mywidget.show();
return app.exec();
}
Kod: Markera allt
#ifndef TEST_H
#define TEST_H
#include <QWidget>
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0, int x=0, int y=0);
void paintEvent(QPaintEvent *event);
private:
int x_led, y_led;
};
#endif
Kod: Markera allt
//https://stackoverflow.com/questions/19160030/whats-painter-setviewport-exactly-do
#include <QtGui>
#include <iostream>
#include "viewport.h"
MyWidget::MyWidget(QWidget *parent, int x, int y) : x_led(x), y_led(y), QWidget(parent) {
std::cout << "MyWidget constructor" << std::endl;
}
void MyWidget::paintEvent(QPaintEvent *event)
{
QString title=windowTitle();
std::string utf8_text = title.toUtf8().constData();
std::cout << "windowTitle @paintEvent: " << utf8_text << std::endl;
QPainter painter(this);
QPen pen(Qt::blue,3,Qt::SolidLine);
painter.setPen(pen);
this->resize(x_led,y_led);
painter.setViewport(50,50,200,200);
painter.setWindow(-100,-100,200,200);
QRect rect = painter.viewport();
QRect wind = painter.window();
std::cerr << "width(): " << width() << " height(): " <<std::endl;
std::cerr << "rect.x(): " << rect.x() << " "<< rect.y() << " "<< rect.height() << " "<< rect.width() <<std::endl;
std::cerr << "wind.x(): " << wind.x() << " "<< wind.y() << " "<< wind.height() << " "<< wind.width() <<std::endl << std::endl;
/* Draw pie slice */
#define pie_slice
#ifdef pie_slice
painter.setPen(QPen(Qt::red));
painter.drawRect(0,0,5,5);
painter.drawRect(-100,-100,5,5);
painter.drawRect(200,200,5,5);
painter.drawRect(140,140,5,5);
painter.drawRect(150,150,5,5);
painter.setBrush(QBrush(Qt::red));
painter.drawPie(QRect(-125,-125,250,250), 0*16, 45*16 );
painter.drawPie(QRect(-125,0,250,250), 0*16, 45*16 );
painter.setBrush(QBrush(Qt::blue));
painter.drawPie(QRect(-110,-110,220,220), 0*16, 45*16 ); //NB x,y lika och witdh och height 2*x
#endif
}