从我的另一个博客迁徙而来;那个账号登不上去
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;
}