QT的二维坐标系统的(0,0)点在窗体左上角,随(x,y)往右下移动。
二维作图要使用QPainter类,我们是在一个叫做paintEvent的方法里进行作图的,这个方法的意思就是重绘,就是说,当你的窗体需要重绘时(如被拉伸,开启,关闭,被调用(update()))等等,会调用这个方法。
void ColorBoard::paintEvent(QPaintEvent *)
{
QPainter *painter = new QPainter(this);
以上的几行代码就是我们一般进行二维作图时要最先打的几行。
要做二维作图,我们先要明白视口和窗口,物理坐标和逻辑坐标的概念,所谓视口与其物理坐标 ,就是指在屏幕上的看到的实际的一个个像素和其坐标,而所谓窗口和逻辑坐标,就是指我们指定了一个这个窗体的坐标系,在这个坐标系内做的东西是先在其内画好,在转换到物理坐标系内去。本来呢,物理坐标和逻辑坐标显然是一样的,除非你调用了setWindow方法去设置了逻辑坐标,举个例子,请先看图1:

我们看到,设置了逻辑坐标之后,坐标系就会随着窗体的拉大而变化。
说到这里大家应该也已经看到了我们为什么要去设置逻辑坐标了,逻辑坐标能让我们在我们自己的坐标系下作图,而不用去管窗体目前(物理上)是多大的。
最后附上相应的程序。
#include "colorboard.h"
#include <QPainter>
ColorBoard::ColorBoard (QWidget *parent)
:QWidget(parent)
{
setPalette(QPalette(QColor(255,255,255)));
setAutoFillBackground(true);
}
QSize ColorBoard::minimumSizeHint() const
{
return QSize(150, 150);
}
void ColorBoard::paintEvent(QPaintEvent *)
{
QPainter *painter = new QPainter(this);\
painter->setWindow(0, 0, 150, 150);
painter->setPen(QPen(Qt::black, 4));
painter->drawLine(20, 20, 50, 30);
painter->drawText(50, 50, tr("used setWindow"));
}
浙公网安备 33010602011771号