• <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編程
             
            一本久久免费视频| 久久久久国产精品麻豆AR影院 | 久久99精品久久久久久水蜜桃 | 麻豆成人久久精品二区三区免费| 亚洲中文字幕无码一久久区| 色综合久久久久无码专区| 国产亚洲精品美女久久久| 精品久久人人妻人人做精品| 久久99这里只有精品国产| 久久成人国产精品二三区| 欧美亚洲国产精品久久| 97久久精品国产精品青草| 久久久久亚洲?V成人无码| 无码人妻久久一区二区三区 | 久久精品无码专区免费东京热 | 久久精品免费大片国产大片| 久久大香萑太香蕉av| 99久久99久久精品国产| 亚洲精品乱码久久久久久蜜桃不卡| 久久99精品久久久久子伦| 伊人 久久 精品| 欧美国产成人久久精品| 国产精品欧美久久久天天影视 | 国产精品久久久久AV福利动漫| 久久久久中文字幕| 亚洲中文字幕无码久久2017| 色偷偷88欧美精品久久久| 嫩草影院久久国产精品| 久久久久女人精品毛片| 国内精品久久久久影院薰衣草 | 精品久久久久成人码免费动漫| 成人国内精品久久久久影院VR| 久久久国产乱子伦精品作者| 奇米影视7777久久精品人人爽| 久久久久一级精品亚洲国产成人综合AV区| 一本一本久久A久久综合精品| 亚洲精品无码久久久久AV麻豆| 久久精品成人免费国产片小草| 久久免费线看线看| 人人狠狠综合久久亚洲88| 四虎国产永久免费久久|