• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Cpper
            C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
            #include <QColor>
            #include 
            <QImage>
            #include 
            <QtGui/QWidget>

            class Widget : public QWidget
            {
                Q_OBJECT
                Q_PROPERTY(QColor penColor READ penColor WRITE setPenColor)
                Q_PROPERTY(QImage iconImage READ iconImage WRITE setIconImage)
                Q_PROPERTY(
            int zoomFactor READ zoomFactor WRITE setZoomFactor)
            public:
                Widget(QWidget 
            *parent = 0);
                
            ~Widget();

                
            void   setPenColor(const QColor& newColor);
                QColor penColor()
            const{return curColor;}
                
            void   setZoomFactor(int newZoom);
                
            int    zoomFactor()const{return zoom;}
                
            void   setIconImage(const QImage& image);
                QImage iconImage()
            const{return image;}
                QSize  sizeHint()
            const;
            protected:
                
            void   mousePressEvent(QMouseEvent *event);
                
            void   mouseMoveEvent(QMouseEvent* event);
                
            void   paintEvent(QPaintEvent* event);
            private:
                
            void   setImagePixel(const QPoint &pos,bool opaque);
                QRect  pixelRect(
            int i,int j)const;

                QColor curColor;
                QImage image;
                
            int    zoom;
            };

            #include <QtGui>
            #include "widget.h"
            Widget::Widget(QWidget *parent)
             : QWidget(parent)
            {
             this->setAttribute(Qt::WA_StaticContents);
             this->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
             this->curColor = Qt::black;
             this->zoom = 8;
             image = QImage(16,16,QImage::Format_ARGB32);
             image.fill(qRgba(0,0,0,0));
            }
            Widget::~Widget()
            { 
            }
            QSize Widget::sizeHint()const
            {
             QSize size = zoom * image.size();
             if(zoom >= 3)
             size += QSize(1,1);
             return size;
            }
            void Widget::setPenColor(const QColor& newColor)
            {
             curColor = newColor;
            }
            void Widget::setIconImage(const QImage& image)
            {
             if(this->image != image)
             {
             this->image = image.convertToFormat(QImage::Format_ARGB32);
             update();
             this->updateGeometry();
             }
            }
            void Widget::paintEvent(QPaintEvent* event)
            {
             QPainter painter(this);
             if(zoom >=3)
             {
             painter.setPen(this->palette().foreground().color());
             for(int i = 0; i <= image.width();++i)
             painter.drawLine(zoom*i,0,zoom*i,zoom*image.height());
             for(int j = 0;j <= image.height();j++)
             painter.drawLine(0,zoom*j,zoom*image.width(),zoom*j);
             }
             for(int i = 0; i < image.width();i++)
             {
             for(int j = 0;j < image.height();j++)
             {
             QRect rect = this->pixelRect(i,j);
             if(!event->region().intersect(rect).isEmpty())
             {
             QColor color = QColor::fromRgba(image.pixel(i,j));
             if(color.alpha() < 255)
             painter.fillRect(rect,Qt::white);
             painter.fillRect(rect,color);
             }
             }
             }
            }
            QRect Widget::pixelRect(int i, int j) const
            {
             if(zoom >=3)
             return QRect(zoom*i+1,zoom*j+1,zoom-1,zoom-1);
             return QRect(zoom*i,zoom*j,zoom,zoom);
            }
            void Widget::mousePressEvent(QMouseEvent *event)
            {
             if(event->button() == Qt::LeftButton)
             setImagePixel(event->pos(),true);
             else if(event->button() == Qt::RightButton)
             setImagePixel(event->pos(),false);
            }
            void Widget::mouseMoveEvent(QMouseEvent *event)
            {
             if(event->buttons() & Qt::LeftButton)
             setImagePixel(event->pos(),true);
             else if(event->buttons() & Qt::RightButton)
             setImagePixel(event->pos(),false);
            }
            void Widget::setImagePixel(const QPoint &pos, bool opaque)
            {
             int i = pos.x()/zoom;
             int j = pos.y()/zoom;
             if(image.rect().contains(i,j))
             {
             if(opaque)
             image.setPixel(i,j,penColor().rgba());
             else
             image.setPixel(i,j,qRgba(0,0,0,0));
             this->update(this->pixelRect(i,j));
             }
            }
            void Widget::setZoomFactor(int newZoom)
            {
             if(newZoom < 1)
             newZoom = 1;
             if(newZoom != zoom)
             {
             zoom = newZoom;
             update();
             updateGeometry();
             }
            }
            幾點說明:
            1.宏 Q_PROPERTY 聲明屬性讀寫屬性
            2.setSizePolicy(.,.) 說明控件最小尺寸為推薦尺寸
            3.sizeHint() 獲得控件推薦尺寸
            4.控件 update()/updateGeometry()用于下次重繪和調整控件尺寸
            5.在函數paintEvent中繪制圖元
            6.一個控件的調色板有3個顏色組 激活,非激活,不可用
            posted on 2011-08-03 22:15 ccsdu2009 閱讀(1194) 評論(0)  編輯 收藏 引用 所屬分類: QT編程
             
            亚洲AV无码一区东京热久久| 国内精品伊人久久久久av一坑| 精品久久久久久久中文字幕| 久久亚洲电影| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 91精品国产91久久久久久蜜臀 | 2021精品国产综合久久| 色诱久久av| 亚洲狠狠久久综合一区77777| 九九精品久久久久久噜噜| 91久久精一区二区三区大全| 一级做a爰片久久毛片看看| 日本福利片国产午夜久久| 狠狠色婷婷久久综合频道日韩| 久久高潮一级毛片免费| 久久久久久国产精品免费无码| 久久精品亚洲福利| 国产精品久久国产精麻豆99网站| 一日本道伊人久久综合影| 麻豆精品久久精品色综合| 久久精品天天中文字幕人妻| 欧美性猛交xxxx免费看久久久| 久久国产精品-国产精品| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久伊人色| 97久久精品人人澡人人爽| 浪潮AV色综合久久天堂| 午夜不卡久久精品无码免费| 色天使久久综合网天天| 国产午夜精品久久久久九九电影 | 无码国内精品久久人妻蜜桃| 热久久最新网站获取| 日本精品久久久久影院日本| 国内精品久久久久久久亚洲| 香港aa三级久久三级| 亚洲成人精品久久| 91久久福利国产成人精品| 99久久精品国产综合一区 | 亚州日韩精品专区久久久| 性做久久久久久久久久久| 亚洲国产成人久久综合区|