世界坐标:也叫逻辑坐标,使用的单位叫做逻辑单位,是人类世界中的坐标,如北京在地图中的坐标为(700km,899km)。这种坐标系统可大可小,大可至几万千米,小至几毫米,随你设置,该系统中坐标大小与显示设备大小无关。一般来说,逻辑坐标系在左下角,正X轴向又,正Y轴向上。
窗口坐标:窗口坐标和世界坐标其实没有太大区别,都使用逻辑坐标进行表示。只是世界坐标和窗口坐标之间可能会存在一些变换,如平移、缩放、旋转、扭曲。
设备坐标:也叫物理坐标,原点在左上角,正X轴向右,正Y轴向下,显示器中,坐标单位通常为像素,打印机中,坐标单位通常为点。其X、Y的负半轴为虚设,超出设备的部分无法显示或无法打印图形。设备坐标系和设备大小密切相关的,超出设备大小之外的图形是不予显示或打印的。
例子:
代码实现:
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen;
pen.setColor(Qt::red);
pen.setWidthF(0.5);
pen.setStyle(Qt::DashDotLine);
painter.setPen(pen);
painter.setViewport(0, 0, width(), height());
painter.setWindow(-100, 100, 200, -200);//(-100, 100), (100, -100)
painter.drawLine(QPoint(0, 0), QPoint(100, 100));
}
实现一个正弦波形:
源码:
Widget::Widget(QWidget *parent) : QWidget(parent)
{
setWindowTitle(QString::fromLocal8Bit(" D.T.Software"));
for(float x=-10; x<10; x+=0.01)
{
float y = qSin(x);
m_list.append(QPointF(x, y));
}
qDebug() << m_list.size();
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen;
pen.setColor(Qt::blue);
pen.setWidthF(0.05);
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
painter.fillRect(QRect(60, 60, width()-120, height()-120), Qt::black);
painter.setViewport(60, 60, width()-120, height()-120);
painter.setWindow(-10, 2, 20, -4);//(-10, 2), (10, -2)
painter.drawLine(QPoint(-10, 0), QPoint(10, 0));
painter.drawLine(QPoint(0, 2), QPoint(0, -2));
QList<QPointF>::iterator it = m_list.begin();
while (it != m_list.end())
{
qDebug() << *it;
painter.drawPoint(*it);
++it;
}
}
源码链接:https://download.csdn.net/download/weixin_41937297/36870039