Qt学习例子13——Customitem
2011-04-08 13:17
357 查看
Customitem是制作自己的绘图节点,主要重写QGraphicsItem的几个函数
依据此图而建:
程序代码如下:
//main.cpp
//smileyitem.h
//smileyitem.cpp
程序效果同前面的差不多:(笑脸可以移动)
依据此图而建:
程序代码如下:
//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学习 之 Socket通信(一个简单的例子)
- Qt学习例子6——customtype
- Qt学习之路_13(简易俄罗斯方块)
- Qt学习 之 Socket通信(世界上最简单的例子了)
- qt fortuneserver 例子学习 ( 给客户端发送消息)
- Qt学习例子7——fileaccess
- Qt学习例子8——filechooser
- Qt线程学习 一个QThread例子
- QT中QTreeView学习的两个例子
- Qt学习例子9——smile3
- Qt多线程学习-用例子来理解多线程(转)
- Qt学习例子10——Compsegraphicsitem
- Qt多线程学习-用例子来理解多线程(转)
- python学习笔记13:Qt Designer的安装方法
- Qt多线程学习-用例子来理解多线程(转)
- Qt学习例子11——Transformedsmiley
- Qt学习(13)
- Qt学习例子12——Movablesimley
- Qt学习 之 Socket通信(一个简单的例子)
- Qt多线程学习-用例子来理解多线程