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

运行的效果如下:


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

       

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值