QT绘制不规则多边形

第一种:直接在界面上绘制

在widget中对paintEvent进行重写,然后就可以得到多边形。

void Widget::paintEvent(QPaintEvent *event)
{
    //创建画笔
    QPainter painter(this);

    //创建画刷
    QBrush brush(QColor(0, 0, 255), Qt::SolidPattern);
    //使用画刷
    painter.setBrush(brush);

    //定义四个点
    static const QPointF points[4] = {
        QPointF(270.0, 80.0),
        QPointF(290.0, 10.0),
        QPointF(350.0, 30.0),
        QPointF(390.0, 70.0)
    };
    //使用四个点绘制多边形
    painter.drawPolygon(points, 4);
}

 

第二种:利用QT图形视图框架绘制

QT图形视图框架(Graphics View)

参考:https://blog.csdn.net/qq_40732350/article/details/90116319

首先对Item进行继承

myitem.h

#include <QGraphicsItem>

class MyItem : public QGraphicsItem
{
public:
    MyItem();
    QRectF boundingRect() const;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget);

    void setColor(const QColor &color) { brushColor = color; }

private:
    QColor brushColor;

};

myitem.cpp

#include "myitem.h"
#include <QPainter>
#include <QCursor>
#include <QKeyEvent>
#include <QGraphicsSceneHoverEvent>
#include <QGraphicsSceneContextMenuEvent>
#include <QMenu>
#include <qdebug.h>

MyItem::MyItem()
{
    brushColor = Qt::red;

    setFlag(QGraphicsItem::ItemIsFocusable);
    setFlag(QGraphicsItem::ItemIsMovable);
    setAcceptHoverEvents(true);

}
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,
                   QWidget *)
{
    if (hasFocus()) {
        painter->setPen(QPen(QColor(255, 255, 255, 200)));
    } else {
        painter->setPen(QPen(QColor(100, 100, 100, 100)));
    }
    painter->setBrush(brushColor);
    //painter->drawRect(-10, -10, 20, 20);

    // 定义四个点
    static const QPointF points[4] = {
    QPointF(200.0, 80.0),
    QPointF(220.0, 10.0),
    QPointF(270.0, 30.0),
    QPointF(310.0, 70.0)
    };
    // 使用四个点绘制多边形
    painter->drawPolygon(points, 4);

}

QRectF MyItem::boundingRect() const
{
    qreal adjust = 0.5;
    return QRectF(-10 - adjust, -10 - adjust,
                  20 + adjust, 20 + adjust);
}
#include "widget.h"
#include "ui_widget.h"
#include <QGraphicsRectItem>
#include <qdebug.h>
#include "myitem.h"
#include <qpainter.h>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
        ui->setupUi(this);
        m_scene=new QGraphicsScene;
        MyItem *item=new MyItem;
        item->setPos(0,0);
        item->setColor(QColor(Qt::red));
    
        m_scene->addItem(item);
        ui->graphicsView->setSceneRect(-100,-100,100,100);
        ui->graphicsView->setScene(m_scene);


}

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

运行结果:

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值