读书人

2D容易绘图-QT

发布时间: 2013-02-19 11:11:40 作者: rapoo

2D简单绘图---QT

昨天我女朋友看了我的文章,和我说了一句:你这样写文章,不深入!哎呀,这句话把我说的那可这是有点杯具啊!不过,说得好,一句挫中了我写文章的缺点,最后我只想说一句:老婆大人威武(开玩笑啦)!好,吸取教训2D容易绘图-QT,以后的文章争取给大家说的详细一些,毕竟我现在还是一个大二的学生,能力有限,还望大家谅解,不过我会尽力把我知道的东西,尽量的抖出来!

好了,又说了定废话,进入主题吧。今天咱说说QT的2D绘图。这就说到QT的一个类QPainter了。QPainter可以绘制从简单的直线到像饼图和弦这样的复杂形状。它也可以绘制排列的文本和像素映射。大概有个这样的理解就行了,对于一个初学者来说。另外,如果大家想具体了解一下的话,查一下API就OK了!

绘图工具的典型用法:1、构造一个绘图工具。2、设置画笔和画刷等。3、绘制。4、销毁这个绘图工具。

接下来咱做一个实例吧,怎么用QPainter这个类画一些简单的东西。

首先定义一个组件:

class PaintedWidget :public QWidget

{
public:
PaintedWidget();
protected:
void paintEvent(QPaintEvent *event);
};

然后在构造函数中定义一下PaintedWidget的大小和title,没什么好说的:

PaintedWidget::PaintedWidget()
{
resize(800,600);
setWindowTitle(tr("PaintDemo"));
}

接下来就是来实现paintEvent函数了:

void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(80,100, 650, 500);
painter.setPen(Qt::red);
painter.drawRect(10,10, 100, 400);
painter.setPen(QPen(Qt::green,5));
painter.setBrush(Qt::blue);
painter.drawEllipse(50,150, 400, 200);
}

这个实现多说一点,先创建一个对象painter,然后调用以上几个方法。drawLine这个函数里传的四个参数,就是重点A(80,100)到点B(650,500)的一条直线,并且当前画笔坐标为(650,500)。setPen这个方法就是设置一下画笔的颜色。drawRect(10,10,100,400)这个函数就是在左上角(10,10)的位置上画一个宽为100,高为400的矩形。setBrush是设置画刷的颜色。drawEllipse是绘制中心在(50 + 400/2, 150 + 200/2)并且大小为(400, 200)的椭圆。

加上主函数:

int main(int argc,char *argv[])
{
QApplicationapp(argc, argv);
PaintedWidget w;
w.show();
return app.exec();
}

然后看看把这些东西连起来的代码吧:

#include <QApplication>
#include <QWidget>
#include <QPen>
#include <QPainter>
 class PaintedWidget : public QWidget
 {
 public:
     PaintedWidget();
 protected:
     void paintEvent(QPaintEvent *event);
 };
 PaintedWidget::PaintedWidget()
 {
     resize(800,600);
     setWindowTitle(tr("Paint Demo"));
 }
 void PaintedWidget::paintEvent(QPaintEvent *event)
  {
          QPainter painter(this);
          painter.drawLine(80, 100, 650, 500);
          painter.setPen(Qt::red);
          painter.drawRect(10, 10, 100, 400);
          painter.setPen(QPen(Qt::green, 5));
          painter.setBrush(Qt::blue);
          painter.drawEllipse(50, 150, 400, 200);
  }
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     PaintedWidget w;
     w.show();
     return app.exec();
 }

运行的效果如下:

2D容易绘图-QT

说点其他的,我感觉html5的兴起有一部分就是<canvas></canvas>标签的加入,否者cocos2D-html5的游戏引擎怎么么会出现呢。大家如果看了html5利用<canvas>的实现画图功能的话,其实和QT的2d绘图都是大同小异的!好了,今天写的多一点,不过也挺费时间的,不过这样也挺好的!今儿就这么着吧!

读书人网 >移动开发

热点推荐