zoukankan      html  css  js  c++  java
  • (转载)QPainter的用法

    (转载)http://www.devdiv.com/home.php?mod=space&uid=1459&do=blog&id=1273
     做过Symbian的都知道CCoeControl的Draw函数,QPainter就是相当于CWindowGc,用来画各种图形,以下是我做的一点小测试,没有测试全,以后在用到的时候再查SDK,这里主要展示的是这些图形是怎么画出来的。

                              

    .h

    #ifndef MYIMGTEST_H_
    #define MYIMGTEST_H_

     

    #include <QWidget>

    class MyImgTest : public QWidget
    {
        Q_OBJECT
    public:
        MyImgTest(QWidget* parent = 0);
        ~MyImgTest();
        void paintEvent(QPaintEvent *);
    };

    #endif /* MYIMGTEST_H_ */

    .cpp

    #include "MyImgTest.h"
    #include <QPainter>
    #include <QRect>
    #include <QPointF>
    #include <QLineF>

    MyImgTest::MyImgTest(QWidget* parent) : QWidget(parent)
    {
        setFixedSize(360,485); //固定大小
        setWindowTitle("Hello DevDiv!");
    }

    MyImgTest::~MyImgTest()
    {
        
    }

    void MyImgTest::paintEvent(QPaintEvent *)
    {
        // 画一条直线
        QPainter painter(this);             // 创建QPainter一个对象
        QPen pen;
        pen.setColor(Qt::yellow);           // 设置画笔为黄色
        painter.setPen(pen);                // 设置画笔
        painter.drawLine(rect().topLeft(), rect().bottomRight());
        
        // 画一个空心矩形
        pen.setColor(Qt::darkRed);
        painter.setPen(pen);
        painter.drawRect(QRect(1, 1, 100, 100));
        
        // 画一个实心矩形
        QBrush bruch(Qt::FDiagPattern);     // 画刷
        painter.setBrush(bruch);            // 设置画刷
        painter.drawRect(QRect(105, 1, 100, 100));
        
        // 画一个多点线
        pen.setColor(Qt::white);
        painter.setPen(pen);
        bruch.setStyle(Qt::NoBrush);        // 将画刷设置成null
        painter.setBrush(bruch);
        static const QPointF points[4] = {QPointF(210.0, 1), QPointF(220.0, 50.3), QPointF(300, 100.4), QPointF(260.4, 120.0)};
        painter.drawPolyline(points, 4);
        
        // 画多个点
        QPointF pointf[10];
        for (int i=0; i<10; ++i)
        {
            pointf[i].setX(2.0+i*10.0);
            pointf[i].setY(130.0);
        }
        painter.drawPoints(pointf, 10);
        
        // 画多条线
        QLineF linef[5];
        for (int j=0; j<5; ++j)
        {
            linef[j].setP1(QPointF(110.9+j*10, 120.0));
            linef[j].setP2(QPointF(120.8+j*12, 200.0));
        }
        painter.drawLines(linef, 5);
        
        // 画一个多边形
        QPolygonF polygon;
        polygon << QPointF(200.0, 120.0) << QPointF(230.0, 130.0) << QPointF(260.0, 180.0) << QPointF(200.0, 200.0);
        bruch.setStyle(Qt::CrossPattern);
        painter.setBrush(bruch);
        painter.drawPolygon(polygon, Qt::WindingFill);
        
        // 画一个圆角矩形
        QRectF rectangle(290.0, 110.0, 50, 50);
        bruch.setStyle(Qt::SolidPattern);
        painter.setBrush(bruch);
        painter.drawRoundedRect(rectangle, 20.0, 15.0);
        
        // 画一个QString
        painter.drawText(50, 300, "Hello DevDiv!");
    }

    main.cpp

        MyImgTest* widget = new MyImgTest();
        widget->show();

  • 相关阅读:
    一个来自红帽的Java垃圾回收算法,试图把停顿时间降到10毫秒以下 原创 2017-01-10 薛命灯
    Filter 配置多个URL-PATTERN
    页面接口防刷 解决思路一nginx
    数据库 原理解析
    程序员提高工作效率的15个技巧【Facebook】
    我总是记不住的那几个代码
    自适应开发
    文字换行
    CSS对字体单位的总结
    页面距离总结
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3076128.html
Copyright © 2011-2022 走看看