我是一只小小小小鸟

导航

 

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"));
}

  


 



 

 

posted on 2012-02-03 19:52  cloudygoose  阅读(2352)  评论(0)    收藏  举报