Qt视口窗口

Viewport.pro

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Viewport
TEMPLATE = app

SOURCES += main.cpp \
    widget.cpp

HEADERS  += widget.h

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    Widget w;
    w.show();

    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget {
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
protected:
    void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
};

#endif // WIDGET_H

widget.cpp

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

Widget::Widget(QWidget *parent) : QWidget(parent) {
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
    resize(300,300);
}

void Widget::paintEvent(QPaintEvent *event) {
    Q_UNUSED(event);
    QPainter painter(this);
    QPen pen;
    pen.setWidth(5); //线宽
    painter.setPen(pen);

    int W = width();
    int H = height();

    //设置画刷
    QBrush  brush;
    brush.setColor(Qt::yellow); //画刷颜色
    brush.setStyle(Qt::SolidPattern); //画刷填充样式
    painter.setBrush(brush);

    int side = qMin(W, H);//取长和宽的小值
    QRect rect((W-side)/2, (H-side)/2, side, side); //viewport矩形区
    painter.drawRect(rect); //Viewport大小

    painter.setViewport(rect);//设置Viewport
    painter.setWindow(-100, -100, 200, 200); // 设置窗口大小,逻辑坐标

    painter.setRenderHint(QPainter::Antialiasing);

    //设置画笔
    pen.setWidth(1); //线宽
    pen.setColor(Qt::red); //划线颜色

    //Qt::NoPen, Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLine, Qt::DashDotDotLine, Qt::CustomDashLine
    pen.setStyle(Qt::SolidLine);//线的类型,实线、虚线等

    //Qt::FlatCap, Qt::SquareCap, Qt::RoundCap
    pen.setCapStyle(Qt::FlatCap);//线端点样式

    //Qt::MiterJoin, Qt::BevelJoin, Qt::RoundJoin, Qt::SvgMiterJoin
    pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式
    painter.setPen(pen);

    //径向渐变
    QRadialGradient  radialGrad(50, 0, 50, 50, 0);
    radialGrad.setColorAt(0, Qt::white);
    radialGrad.setColorAt(0, Qt::yellow);
    radialGrad.setColorAt(1, Qt::blue);
    //QGradient::PadSpread, QGradient::RepeatSpread, QGradient::ReflectSpread
    radialGrad.setSpread(QGradient::ReflectSpread);
    painter.setBrush(radialGrad);

    //圆锥型渐变
    QConicalGradient  coniGrad(W/2, H/2, 45);
    coniGrad.setColorAt(0, Qt::white);
    coniGrad.setColorAt(0.5, Qt::blue);
    coniGrad.setColorAt(1, Qt::red);
    painter.setBrush(coniGrad);

    //线性渐变
    QLinearGradient  linearGrad(0, 0, 100, 0);//从左到右,
    linearGrad.setColorAt(0, Qt::yellow);//起点颜色
    linearGrad.setColorAt(1, Qt::green);//终点颜色
    linearGrad.setSpread(QGradient::PadSpread);  //展布模式
    painter.setBrush(linearGrad);

    //设置复合模式
	painter.setCompositionMode(QPainter::CompositionMode_Difference);

    for(int i=0; i<36;i++) {
        painter.drawEllipse(QPoint(50, 0), 50, 50);
        painter.rotate(10);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值