第一种:直接在界面上绘制
在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;
}
运行结果: