我真的很难在Qt上的Pixmap上绘制“道路”。 我的所有坐标都是小数值的,它们彼此非常接近(我通过使用墨卡托的公式将它们从经度/纬度转换为X / Y坐标)。 Qt drawLine函数只有在像素图上绘制的整数参数(例如,因为没有人会绘制2.5像素)。此外,坐标从左上角开始,所以我需要更改它,如下所示:
Xold = x
Ynew = Ymax - Y
现在我有普通的X / Y坐标系,Y轴向上,X轴向左。
这是我的代码,我是如何画线的:
double minlat = 637800*log(tan(3.14/4+3.14*bounds[1]/360.0))/log(2.71),maxlat=637800*log(tan(3.14/4+3.14*bounds[2]/360.0))/log(2.71);
std::vector<double> x;
std::vector<double> y;
QSize size = ui->label_2->size();
size=ui->label_2->size();
QImage pic(size.width(),size.height(),QImage::Format_ARGB32_Premultiplied);
pic.fill(Qt::transparent);
QPainter painter(&pic);
for (unsigned int i=0; i < wayVector.size(); i++){
for (unsigned int j=0; j<wayVector[i].refs.size(); j++){
x.push_back(637800*3.14*nodeHash[wayVector[i].refs[j]].lon/180.0);
y.push_back(637800*log(tan(3.14/4+3.14*nodeHash[wayVector[i].refs[j]].lat/360.0))/log(2.71));
}
for (unsigned int j=0; j<wayVector[i].refs.size()-1;j++){
painter.setPen(Qt::green);
double x1 = x[j]/(size.width()/(maxlon-minlon));
double y1 = maxlat*size.height()/(maxlat-minlat)-y[j]*size.height()/(maxlat-minlat);
double x2 = x[j+1]/(size.width()/(maxlon-minlon));
double y2 = maxlat*size.height()/(maxlat-minlat)-y[j+1]*size.height()/(maxlat-minlat);
painter.drawLine(x1,y1,x2,y2);
}
x.clear();
y.clear();
}
但是只要我将x1,y1,x2,y2放到drawLine函数中它们就会转换为整数并且一切都会出错,因为所有的X / Y坐标都变得相同(因为它们非常接近)。
我真的不知道如何在像素图上绘制这些线条。 有任何想法吗?
答案 0 :(得分:1)
有5种不同的drawLine()函数。请改用void QPainter::drawLine(const QPointF& p1, const QPointF& p2)
或void QPainter::drawLine(const QLineF& line)
。那些以F
结尾的类型使用双精度。