• <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 閱讀(1192) 評論(0)  編輯 收藏 引用 所屬分類: QT編程
             
            欧美777精品久久久久网| 亚洲欧美另类日本久久国产真实乱对白| 欧美久久久久久午夜精品| 日韩亚洲国产综合久久久| 亚洲欧洲久久久精品| 日日噜噜夜夜狠狠久久丁香五月| 久久久久亚洲av无码专区导航| 久久久91精品国产一区二区三区| 久久人人爽人爽人人爽av| 久久综合亚洲欧美成人| 日韩亚洲国产综合久久久| 久久超乳爆乳中文字幕| 亚洲七七久久精品中文国产| 国产91久久精品一区二区| 欧美激情精品久久久久久| 91精品国产综合久久婷婷 | 成人精品一区二区久久| 综合久久国产九一剧情麻豆| 精品国产婷婷久久久| 国产精品18久久久久久vr| 亚洲精品无码久久不卡| 青草影院天堂男人久久| 久久99精品国产麻豆 | 国产成人久久AV免费| 7777精品伊人久久久大香线蕉 | 久久精品国产亚洲一区二区三区| 久久久久久亚洲Av无码精品专口 | 久久精品99久久香蕉国产色戒| 伊人伊成久久人综合网777| 国产精品欧美亚洲韩国日本久久 | 亚洲国产精品综合久久一线| 9191精品国产免费久久| 99国产欧美精品久久久蜜芽| 久久精品无码专区免费东京热| 久久久久国产精品人妻| 少妇无套内谢久久久久| 少妇人妻综合久久中文字幕| 99久久香蕉国产线看观香| 一本色道久久88精品综合| 乱亲女H秽乱长久久久| 亚洲色婷婷综合久久|