Qt画正五角星

从我的另一个博客迁徙而来;那个账号登不上去

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPainterPath>
#include <QPainter>
#include <QtMath>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
 protected:
    bool drawFivePointedtar(QPainter& painter, QPointF &firstpoint, QPointF &secondpoint, bool isclockwise=true);
    void paintEvent(QPaintEvent *event);
    bool isInRange(const qreal x, const qreal y);
    bool isInRange(const QPointF point);
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();    
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);  
}
 void MainWindow::paintEvent(QPaintEvent *event)
 {
     QPointF p1 = QPointF(405, 100);
     QPointF p2 = QPointF(300, 100);
     QPainter painter(this);
     if( drawFivePointedtar(painter, p1, p2, false) == false )
     {
         qDebug() << "Five Pointed Star Failed...";
     }
     Q_UNUSED(event);
 }
 bool MainWindow::drawFivePointedtar(QPainter& painter, QPointF &firstpoint, QPointF &secondpoint, bool isclockwise)
 {
     bool ret = true;
     if( (isInRange(firstpoint) && isInRange(secondpoint) == false) )
     {
         return false;
     }
     QLineF line(firstpoint, secondpoint);
     QPainterPath starPath;
     starPath.moveTo(firstpoint);
     painter.drawText(firstpoint.x(), firstpoint.y() ,QString("(%1,%2)").arg(firstpoint.x()).arg(firstpoint.y()));
     starPath.lineTo(secondpoint);
     painter.drawText(secondpoint.x(), secondpoint.y(), QString("(%1,%2)").arg(secondpoint.x()).arg(secondpoint.y()));
    for(int cnt=1; cnt<5; cnt++)
    {
        line.setPoints(QPointF(line.x2(), line.y2()), QPointF(line.x1(), line.y1()));
        line.setAngle( isclockwise ? (line.angle() + 36) : (line.angle() - 36));
        if(isInRange(line.p2()))
        {
            starPath.lineTo(line.p2());
        }
        else
        {
            qDebug() << "Five Pointed Star is out of range... error Point: " << line.x2() << line.y2();
            return false;
        }
    }
    painter.drawPath(starPath);
    starPath.closeSubpath();
    return ret;
 }
bool MainWindow::isInRange(const qreal x, const qreal y)
{
    bool ret = true;
    if( (x < 0) || (x > 1000)|| (y > 1000) || ((y < 0)) )
    {
        ret = false;
    }
    return ret;
}
bool MainWindow::isInRange(const QPointF point)
{
   return isInRange(point.x(), point.y());
}
MainWindow::~MainWindow()
{
    delete ui;
}

猜你喜欢

转载自blog.csdn.net/weixin_41053379/article/details/81076427
今日推荐