您的位置:首页 > 编程语言 > Qt开发

Qt学习例子13——Customitem

2011-04-08 13:17 357 查看
Customitem是制作自己的绘图节点,主要重写QGraphicsItem的几个函数

依据此图而建:

 



 

 

程序代码如下:

 

//main.cpp

 

#include <QtGui/QApplication>

#include <QGraphicsView>

#include <QGraphicsScene>

#include "smileyitem.h"

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    QGraphicsView w;

    QGraphicsScene scene;

    w.setScene(&scene);

    SmileyItem *item = new SmileyItem;

    scene.addItem(item);

    item->setFlag(QGraphicsItem::ItemIsMovable);

    w.setRenderHint(QPainter::Antialiasing);

    w.show();

    w.resize(600,400);

    return a.exec();

}

 

//smileyitem.h

 

#ifndef SMILEYITEM_H

#define SMILEYITEM_H

#include <QGraphicsItem>

class SmileyItem : public QGraphicsItem

{

public:

    SmileyItem();

    QRectF boundingRect() const;

    void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0);

protected:

    void paintEye(QPainter *painter, const QPointF &pt);

    void paintSmile(QPainter *painter, const QRectF &rect);

};

#endif // SMILEYITEM_H

 

 

//smileyitem.cpp

 

#include "smileyitem.h"

#include <QPainter>

SmileyItem::SmileyItem()

{

}

QRectF SmileyItem::boundingRect() const {

    QRectF br;

    // enter your code here

    br.setRect(-50, -50, 100, 100);

    return br;

}

void SmileyItem::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget *widget ) {

    // enter your code here

    painter->setPen(Qt::NoPen);

//    QRadialGradient gradient = radialGradient();

//    painter->setBrush(gradient);

    painter->setBrush(Qt::yellow);

    painter->drawEllipse(boundingRect());

    paintEye(painter, QPointF(-15, -25));

    paintEye(painter, QPointF(15, -25));

    paintSmile(painter, QRectF(-33, -15,66,50));

}

void SmileyItem::paintEye(QPainter *painter, const QPointF &pt) {

    // enter your code here

    painter->save();

    painter->setPen(Qt::black);

    painter->setBrush(Qt::white);

    painter->drawEllipse(pt,6,12);

    painter->restore();

}

void SmileyItem::paintSmile(QPainter *painter, const QRectF &rect) {

    // enter your code here

    painter->save();

    painter->setPen(Qt::red);

    painter->drawArc(rect,-0,-180*16);  //区分与ArcTo、MoveArcTo

    painter->restore();

}

 

 

程序效果同前面的差不多:(笑脸可以移动)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt