问题描述
我真的不知道如何问这个问题,但我会尽力解释。我在带有GPS的arduino上有一个项目,我通过PC上的serialdata传输了地理位置。我可以毫无问题地阅读它,但是我需要帮助的地方是如何找到这一点。目前我使用这个:
void MainWindow::paintEvent(QPaintEvent* p)
{
QPainter painter(this); //class must be implemented from QWidget
painter.setPen(pen);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.translate(width() / 2-466133,height() / 2+727150);
painter.scale(10000.0,10000.0);
painter.drawpolyline(polyPoints);
}
void MainWindow::readData(QStringList data)
{
ui->textEdit->setText(data.join(","));
polyPoints << QPointF(data[0].todouble(),data[1].todouble());
QWidget::update();
}
我的意思是这样的:
46.612823,-72.702957
46.612876,-72.702873
46.612937,-72.702789
就像您看到2点之间的差异非常小一样,因此我需要以这种方式进行缩放,并且需要使用冗余数字来翻译我的原点。目前,翻译是固定的,但未来将是动态的。
解决方法
您可以使用QTransform
缩放和移动多边形。 QPainter
缩放会增加绘图线的宽度。
使用QPolygonF::boundingRect()
从此处获取原始点的大小和比例。
#include "mainwindow.h"
#include <QPainter>
#include <QPolygonF>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->resize(250,250);
}
MainWindow::~MainWindow()
{
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPolygonF polygon_;
polygon_ << QPointF{46.61,-72.7};
polygon_ << QPointF{46.62,-73};
polygon_ << QPointF{46.63,-72.78};
QPainter painter(this);
QPen pen;
pen.setWidthF(1);
pen.setColor(QColor(Qt::red));
painter.setPen(pen);
painter.setRenderHint(QPainter::Antialiasing);
QRectF rect = polygon_.boundingRect();
qreal scale_x = this->width() / rect.width();
// Qt's y axis is positive downward
qreal scale_y = - this->height() / rect.height();
// Use rect's after-scaling properties to calculate
qreal left_border = (this->width() - rect.width() * scale_x) / 2;
qreal top_border = (this->height() - rect.height() * scale_y) / 2;
// Use rect's after-scaling properties to calculate
QTransform transform;
transform.translate(-rect.x() * scale_x + left_border,-rect.y() * scale_y + top_border);
transform.scale(scale_x,scale_y);
painter.drawPolyline(transform.map(polygon_));
}
输出: