毫州网站建设,每平每家设计家官网,25转行做网站运营,做网站需要提供哪些资料一.使用QPainter绘制 满足条件: 任意角度直线都可绘制箭头所有箭头同样大小 void MainWindow::paintEvent(QPaintEvent*)
{QPainter painter(this); // 创建QPainter对象#xff0c;并指定绘制目标为当前的widgetQLineF line(50,20,500,500);double distanceFromEnd1 20;qre…一.使用QPainter绘制 满足条件: 任意角度直线都可绘制箭头所有箭头同样大小 void MainWindow::paintEvent(QPaintEvent*)
{QPainter painter(this); // 创建QPainter对象并指定绘制目标为当前的widgetQLineF line(50,20,500,500);double distanceFromEnd1 20;qreal t (line.length() - distanceFromEnd1) / line.length();QPointF point line.pointAt(t);//与两端平行点double distanceFromEnd2 5;qreal z (line.length() - distanceFromEnd2) / line.length();QPointF point_centerline.pointAt(z);//中心点qreal slope_line (line.p2().y() - line.p1().y()) / (line.p2().x() - line.p1().x()); // 计算原直线斜率double slope -1 / slope_line; // 计算垂线的斜率double intercept point.y() - slope * point.x(); // 计算垂线的截距const double m5;//垂线上下两端距离double arrow1_x(point.y()m-intercept)/slope;double arrow2_x(point.y()-m-intercept)/slope;QPointF arrow1(arrow1_x,slope*arrow1_xintercept);QPointF arrow2(arrow2_x,slope*arrow2_xintercept);painter.setRenderHint(QPainter::Antialiasing, true); // 可选抗锯齿设置painter.setPen(QPen(Qt::black, 2)); // 设置画笔颜色和宽度painter.drawLine(line); // 绘制直线painter.setPen(QPen(Qt::green,3));painter.drawLine(arrow1,point_center);painter.drawLine(arrow2,point_center);
} 二.使用QPainterPath绘制
1.如何使用 GraphicsView 和 QGraphicsScene 绘制
创建一个类继承 GraphicsView
graphicsView.h
#ifndef GRAPHICSVIEW_H
#define GRAPHICSVIEW_H
#include QGraphicsView
#include QMouseEvent
#include QGraphicsLineItem
#include QGraphicsPathItem
#include QPainterPath
#include QDebug
#include QObject
#include QPointF
#include QGraphicsEllipseItemclass GraphicsView : public QGraphicsView
{
public:GraphicsView(QGraphicsScene *scene, QWidget *parent nullptr);void setLineData();
private:QGraphicsScene *scene_;
};#endif // GRAPHICSVIEW_Hgraphicsview.cpp
#include graphicsview.hGraphicsView::GraphicsView(QGraphicsScene *scene,QWidget *parent ) : QGraphicsView(parent),scene_(scene)
{setScene(scene_);setLineData();
}
void GraphicsView::setLineData()
{QLineF line(100,100,600,400);QPen pen(Qt::red,3);scene_-addLine(line,pen);}主函数中添加私有对象:
private:Ui::MainWindow *ui;GraphicsView *graphics_view;QGraphicsScene *scene;
主函数中调用:
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);scene new QGraphicsScene(this);// 创建 GraphicsView 对象并设置场景GraphicsView* graphicsView new GraphicsView(scene, this);// 添加 GraphicsView 对象为中央部件
// setCentralWidget(graphicsView);// 将 GraphicsView 添加到主窗口
// setCentralWidget(graphicsView);setCentralWidget(graphicsView);// 设置场景大小为主窗口的大小QRectF rect(0, 0, width(), height());scene-setSceneRect(rect);// 根据视图大小调整窗口大小adjustSize();}
图形显示: 2.绘制箭头