天天看点

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)

QT绘制不规则多边形
首先对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;
}      

运行结果: