0
点赞
收藏
分享

微信扫一扫

209_QT_画一个简单的圆【注意:setViewport、setWindow】

alanwhy 2022-01-04 阅读 20

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QLinearGradient>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
    resize(300,200);

}

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

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)//去除event未使用的告警
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    int w = width();
    int h = height();

    int side = qMin(w,h);
    QRect rect((w-side)/2, (h-side)/2,side, side);/*圈一个正方形*/

    painter.drawRect(rect);/*画出来*/

                              /*不使用默认的了,你还是别映射到我整个绘图设备,你映射到我给你的那块区域*/
    painter.setViewport(rect);/*后续的操作图像,显示在我们指定的rect内,实际在窗口映射到窗口显示的区域*/
    painter.setWindow(-100, -100, 200,200);/*在rect内,人为给定的窗口坐标,绘制图形会随着窗口动态等比例变化*/

    QLinearGradient Gradient (0,0,100,0);
    Gradient.setColorAt(0, Qt::yellow);
    Gradient.setColorAt(1, Qt::green);
    Gradient.setSpread(QGradient::PadSpread);/*发散的样式设置颜色*/

    painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);/*混合样式*/
    //painter.setBrush(Gradient);/*制造一个渐变的黑白的变化*/
    for(int i = 0; i < 36; i++)
    {
        qDebug()<< i << endl;
        painter.drawEllipse(QPoint(50, 0), 50,50);/*围绕50:x点,0:y点画圆*/
        painter.rotate(10);

    }


}

在这里插入图片描述

举报

相关推荐

0 条评论