Qt_GUI_IM_4_2 - 8BitsCoding/RobotMentor GitHub Wiki

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget() override;

private:
    Ui::Widget *ui;

    // QWidget interface
protected:
    void paintEvent(QPaintEvent *event) override;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    QPen mPen(Qt::red);
    mPen.setWidth(3);

    QPainter painter(this);

    painter.setPen(mPen);

    qDebug() << "Logical coordinates : " << painter.window();
    // window 클라이언트 사이즈 출력 : QRect(0, 0, 400x300)
    qDebug() << " Physical coordinates : " << painter.viewport();

    painter.drawRect(50,50,100,100);
    // 클라이언트 영역 기준 50, 50, 시작 100, 100 까지

    //Change the logical coordinates . Keep physical coords the same

    painter.save();
    // 그릴 윈도우의 사이즈를 변경하기 전 저장해둔다.
    // 이후 restore을 통해 복구 가능!

    painter.setWindow(0,0,300,200);
    //painter.setViewport(0,0,300,200);
    mPen.setColor(Qt::green);
    painter.setPen(mPen);

    painter.drawRect(50,50,100,100);


    painter.restore();

    //Change physical coordinates . Keep logical the same

     painter.save();

     mPen.setColor(Qt::blue);
     painter.setPen(mPen);
     painter.setViewport(0,0,300,200);

     painter.drawRect(50,50,100,100);

     painter.restore();
}
  • 정리하자면 setWindow는 내가 보는 윈도우를 어떻게 설정할 지
  • setViewport는 내가 그릴 윈도우를 어떻게 설정할 지

⚠️ **GitHub.com Fallback** ⚠️