美文网首页
Qt--QRubberBand橡皮筋类

Qt--QRubberBand橡皮筋类

作者: 寒冰豌豆 | 来源:发表于2017-03-01 12:16 被阅读0次

    转自qt中橡皮筋类 QRubberBand

    在图形编辑应用中常会用到橡皮筋线,如选择图形的某个区域等,最常见的就是在系统桌面上用鼠标拖动,可以绘制一个类似蚂蚁线的选区,并且选区线能够跟随鼠标的移动而伸缩,因此叫作橡皮筋线。
    qt 中用于描绘橡皮筋线的类是QRubberBand,当然单有一个QRubberBand 类还是不能做出橡皮筋的效果出来, 另外还要有鼠标事件的配合,与QRubberBand 配合的鼠标事件有 鼠标单击,拖动及释放。
    创建一个QRubberBand 类,new QRubberBand(QRubberBand::Line,this)
    QRubberBand::Rectangle 是设置橡皮筋线的类型,这种线的效果是描绘了一个方形的区域,还有** QRubberBand::Line** ,则为一个被直线填满的方形区域,相当于一个阴影的方形区域。
    QRubberBand 应用最多的函数是 setGeometry(),其作用是设置了橡皮筋线的位置及大小。
    自己定义一个橡皮筋的类Rubber 如下所示:
    新建一个Qt空项目rubber.pro

    qt += gui core
    
    SOURCES += \
        main.cpp \
        rubber.cpp
    
    HEADERS += \
        rubber.h
    

    main.cpp

    #include <QtGui/QApplication>
    
    #include "rubber.h"
    
    int main(int argc,char**argv)
    {
        QApplication a(argc,argv);
        Rubber rubber;
        rubber.show();
    
        return a.exec();
    }
    

    rubber.h

    #ifndef RUBBER_H
    #define RUBBER_H
    
    #include <QWidget>
    #include <QRubberBand>
    #include <QMouseEvent>
    
    class Rubber : public QWidget
    {
        Q_OBJECT
    public:
        explicit Rubber(QWidget *parent = 0);
        
        void mousePressEvent(QMouseEvent *);
        void mouseMoveEvent(QMouseEvent *);
        void mouseReleaseEvent(QMouseEvent *);
    
     private:
        QRubberBand *rubberBand;
        QPoint origin;
        
    };
    
    #endif // RUBBER_H
    
    

    rubber.cpp

    #include "rubber.h"
    
    Rubber::Rubber(QWidget *parent) :
        QWidget(parent)
    {
        setParent(parent);
        this->setBackgroundRole(QPalette::Light);
        this->setAutoFillBackground(true);
    
        resize(400,360);
        setWindowTitle("Rubber");
        rubberBand = NULL;
    }
    //构造函数完成了对窗体尺寸及背景的设置。
    
    //鼠标在窗体中按下时,创建一个QRubberBand 类,QRubberBand::Rectangle 是设置橡皮筋线的类型,
    //这种线的效果是描绘了一个方形的区域,还有一种是QRubberBand::Line,则为一个被直线填满的方形区域,
    //相当于一个阴影的方形区域。QRubberBand 应用最多的函数是 setGeometry(),其作用是设置了橡皮筋线的位置及大小。
    void Rubber::mousePressEvent(QMouseEvent *e)
    {
        origin = e->pos();
        if(!rubberBand)
            rubberBand = new QRubberBand(QRubberBand::Line,this);
        rubberBand->setGeometry(QRect(origin,QSize()));
        rubberBand->show();
    }
    
    //在鼠标按下,并且鼠标发生移动的时候,这时就可以会出橡皮线的区域,
    //鼠标拖动事件函数重载如下 改区域的大小由QRect(origin,e->pos()).normalized()) 来体现,
    //其中normalized() 函数返回的也是一个QRect的对象,不过该对象的长和宽的值都是大于零时值
    void Rubber::mouseMoveEvent(QMouseEvent *e)
    {
        if(rubberBand)
            rubberBand->setGeometry(QRect(origin,e->pos()).normalized());
    }
    
    //当鼠标松开时,橡皮筋线就可以隐藏了
    void Rubber::mouseReleaseEvent(QMouseEvent *e)
    {
        if(rubberBand)
            rubberBand->hide();
    }
    #include "rubber.h"
    
    Rubber::Rubber(QWidget *parent) :
        QWidget(parent)
    {
        setParent(parent);
        this->setBackgroundRole(QPalette::Light);
        this->setAutoFillBackground(true);
    
        resize(400,360);
        setWindowTitle("Rubber");
        rubberBand = NULL;
    }
    //构造函数完成了对窗体尺寸及背景的设置。
    
    //鼠标在窗体中按下时,创建一个QRubberBand 类,QRubberBand::Rectangle 是设置橡皮筋线的类型,
    //这种线的效果是描绘了一个方形的区域,还有一种是QRubberBand::Line,则为一个被直线填满的方形区域,
    //相当于一个阴影的方形区域。QRubberBand 应用最多的函数是 setGeometry(),其作用是设置了橡皮筋线的位置及大小。
    void Rubber::mousePressEvent(QMouseEvent *e)
    {
        origin = e->pos();
        if(!rubberBand)
            rubberBand = new QRubberBand(QRubberBand::Line,this);
        rubberBand->setGeometry(QRect(origin,QSize()));
        rubberBand->show();
    }
    
    //在鼠标按下,并且鼠标发生移动的时候,这时就可以会出橡皮线的区域,
    //鼠标拖动事件函数重载如下 改区域的大小由QRect(origin,e->pos()).normalized()) 来体现,
    //其中normalized() 函数返回的也是一个QRect的对象,不过该对象的长和宽的值都是大于零时值
    void Rubber::mouseMoveEvent(QMouseEvent *e)
    {
        if(rubberBand)
            rubberBand->setGeometry(QRect(origin,e->pos()).normalized());
    }
    
    //当鼠标松开时,橡皮筋线就可以隐藏了
    void Rubber::mouseReleaseEvent(QMouseEvent *e)
    {
        if(rubberBand)
            rubberBand->hide();
    }
    
    
    Line.png Rectangle.png

    相关文章

      网友评论

          本文标题:Qt--QRubberBand橡皮筋类

          本文链接:https://www.haomeiwen.com/subject/ofeqgttx.html