Qt5.9画五角星的方法

本文实例为大家分享了Qt5.9画五角星的具体代码,供大家参考,具体内容如下

今天记录一下画图部分的程序,比较简单,容易操作,为接下来打好基础:

先说界面吧:

里面的图位置跟图像学有点关系,多多理解一下:

对应的头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
 Q_OBJECT

protected:
 void paintEvent(QPaintEvent *event);

public:
 explicit Widget(QWidget *parent = nullptr);
 ~Widget();

private:
 Ui::Widget *ui;

};

#endif // WIDGET_H

对应的cpp 文件:

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

#include<math.h>
using namespace std;

void Widget::paintEvent(QPaintEvent *event)
{
 Q_UNUSED(event)
 QPainter painter(this);//创建QPainter对象
 painter.setRenderHint(QPainter::Antialiasing);//
 painter.setRenderHint(QPainter::TextAntialiasing);//
 //生成五角星的5个顶点的,假设原点在五角星中心
 qreal R = 100; //半径 //这里说明一下,qreal 在windows 下面是double 在嵌入式中是float类型。
 const qreal Pi = 3.1415926;
 qreal deg = Pi * 72/180;
 QPoint points[5] = {
 QPoint(R,0),
 QPoint(R*cos(deg),-R*sin(deg)),
 QPoint(R*cos(2*deg),-R*sin(2*deg)),
 QPoint(R*cos(3*deg),-R*sin(3*deg)),
 QPoint(R*cos(4*deg),-R*sin(4*deg)),
 };

 //设置字体
 QFont font;
 font.setPointSize(12);
 font.setBold(true);
 painter.setFont(font);

 //设置画笔
 QPen penLine;
 penLine.setWidth(2);//线宽
 penLine.setColor(Qt::blue); //划线颜色
 //Qt::NoPen,Qt::SolidLine, Qt::DashLine, Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,Qt::CustomDashLine
 penLine.setStyle(Qt::SolidLine);//线的类型,实线、虚线等
 //Qt::FlatCap, Qt::SquareCap,Qt::RoundCap
 penLine.setCapStyle(Qt::FlatCap);//线端点样式
 //Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoin
 penLine.setJoinStyle(Qt::BevelJoin);//线的连接点样式
 painter.setPen(penLine);

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

 //设计绘制五角星的PainterPath,以便重复使用
 QPainterPath starPath;
 starPath.moveTo(points[0]);
 starPath.lineTo(points[2]);
 starPath.lineTo(points[4]);
 starPath.lineTo(points[1]);
 starPath.lineTo(points[3]);
 starPath.closeSubpath(); //闭合路径,最后一个点与第一个点相连

 starPath.addText(points[0],font,"0"); //显示端点编号
 starPath.addText(points[1],font,"1");
 starPath.addText(points[2],font,"2");
 starPath.addText(points[3],font,"3");
 starPath.addText(points[4],font,"4");

 //绘图
 painter.save(); //保存坐标状态
 painter.translate(100,120);
 painter.drawPath(starPath); //画星星
 painter.drawText(0,0,"S1");
 painter.restore(); //恢复坐标状态

 painter.translate(300,120); //平移
 painter.scale(0.8,0.8); //缩放
 painter.rotate(90); //顺时针旋转
 painter.drawPath(starPath);//画星星
 painter.drawText(0,0,"S2");

 painter.resetTransform(); //复位所有坐标变换
 painter.translate(500,120); //平移
 painter.rotate(-145); //逆时针旋转
 painter.drawPath(starPath);//画星星
 painter.drawText(0,0,"S3");
}

Widget::Widget(QWidget *parent) :
 QWidget(parent),
 ui(new Ui::Widget)
{
 ui->setupUi(this);
 setPalette(QPalette(Qt::white)); //设置背景色是白色
 setAutoFillBackground(true); //设置背景自动填充
 resize(600,300); //固定大小
}

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Qt 实现钢笔画线效果示例及详细原理

    前言 上一篇文章:Qt 实现画线笔锋效果详细原理,根据这篇介绍的实现笔锋效果的原理,我们很容易实现另外一种笔效:钢笔. 所谓的钢笔笔效,就是真实还原钢笔书写出来的线条效果,其特征就是:根据笔的绘制速度而线条的宽度会逐渐变化,写得越快,线条越细,并且在收笔时带有笔锋效果. 那么,在上一篇文章的基础上,稍微修改一下,就可以实现这个效果,看下效果图: 实现原理 从上一篇文章我们知道,绘制的曲线是通过每两个点形成一条贝塞尔曲线,所以在不松手的情况下连续画线,整条线段是包含很多条path组合而成的.而要实

  • Qt 实现画线笔锋效果详细原理及示例代码

    前言 之前写过一篇文章介绍Qt中绘制平滑曲线的两种方式,文章在这里.这篇文章详细介绍了绘制的原理和实现方式,那么,如果要在此曲线上实现笔锋效果怎么做呢? 所谓的笔锋效果,就是钢笔书写抬笔时的笔尖,也就是说,绘制曲线抬笔时形成一个笔尖的效果. 话不多说,直接来看效果: 动画效果如下: 实现原理 要实现该效果,需要完成以下几个关键步骤: 1.每两个点形成一个贝塞尔曲线path进行绘制 2.最新的一条path绘制细线(笔锋最细处的宽度) 3.倒数第二条path绘制粗线(正常的线条宽度) 4.在两条pa

  • Qt5.9画五角星的方法

    本文实例为大家分享了Qt5.9画五角星的具体代码,供大家参考,具体内容如下 今天记录一下画图部分的程序,比较简单,容易操作,为接下来打好基础: 先说界面吧: 里面的图位置跟图像学有点关系,多多理解一下: 对应的头文件: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT protected: voi

  • Python使用turtule画五角星的方法

    本文实例讲述了Python使用turtule画五角星的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import turtle import time turtle.forward(100) turtle.right(144) time.sleep(1) turtle.forward(100) turtle.right(144) time.sleep(1) turtle.forward(100) turtle.right(144) turtle.fo

  • js实现两点之间画线的方法

    本文实例讲述了js实现两点之间画线的方法.分享给大家供大家参考.具体分析如下: 最近有点无聊,琢磨了很久,想到了一消磨时间的点子,也就是做js版的连连看. 两点之间画线也只是连连看最基本功能的一部分,所以我画的线也仅是折线,而且还只能向左折,后面将根据连连看中图片位置点来确定折线的方向. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/

  • Delphi下OpenGL2d绘图之画四边形的方法

    一.前言: Delphi实现画四边形的方法基本上与前几遍文字代码是相同的.其区别知识在于glBegin()的参数"GL_QUADS".绘制的框架代码可以使用Delphi下OpenGL2d绘图初始化中的代码,地址为http://www.jb51.net/article/52141.htm.修改的部份为 Draw 函数的内容. 二.画四边形方法: 使用GL_QUADS:绘制由四个顶点组成的一组单独的四边形.顶点4n-3.4n-2.4n-1和4n定义了第n个四边形.总共绘制N/4个四边形.这

  • js+canvas绘制五角星的方法

    本文实例讲述了js+canvas绘制五角星的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht

  • C#画笔Pen画虚线的方法

    本文实例讲述了C#画笔Pen画虚线的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace W

  • php基于GD库画五星红旗的方法

    本文实例讲述了php基于GD库画五星红旗的方法.分享给大家供大家参考.具体分析如下: 这里实例分析php画的五星红旗(GD库),代码如下: 复制代码 代码如下: <?php header("Content-Type:image/jpeg"); $ing = imagecreatetruecolor(700,410); //新建一个真彩色图像,返回值为一个图像标识符,背景默认为黑色,参数(x_size*y_size) $red = imagecolorallocate($ing,2

  • C#使用GDI画圆的方法

    本文实例讲述了C#使用GDI画圆的方法.分享给大家供大家参考.具体实现方法如下: Pen p = new Pen(Color.Black, 2); Graphics g = CreateGraphics(); g.DrawEllipse(p, 200, 200, 100, 100); 希望本文所述对大家的C#程序设计有所帮助.

  • python实现画五角星和螺旋线的示例

    如下所示: # -*- coding:UTF-8 -*- __author__ = "zhangguodong" __time__ = "2017.11.16" import turtle turtle.title("张国栋画五角星") turtle.setup(500,300,0,0) turtle.fillcolor("red") turtle.begin_fill() while True: turtle.forward

  • python获取点击的坐标画图形的方法

    获取输入的五个点画五边形 def pentagonUpdate(): p = {} win = GraphWin("Click", 800, 300)#后面两个值为窗体的长和宽 for i in range(5): p[i] = win.getMouse() p[i].draw(win) polygon = Polygon(p[0], p[1], p[2], p[3], p[4]) polygon.setFill("peachpuff") polygon.setOu

随机推荐