Qt学习例子13——Customitem

本文介绍如何在Qt中创建自定义的绘图节点Customitem,通过重写QGraphicsItem的关键函数来实现。示例代码包括main.cpp、smileyitem.h和smileyitem.cpp,最终效果为可移动的笑脸图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Customitem是制作自己的绘图节点,主要重写QGraphicsItem的几个函数


依据此图而建:

 Qt学习例子13鈥斺擟ustomitem


 

 

程序代码如下:

 

//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);  //区分与ArcToMoveArcTo
    painter->restore();
}

 

 

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

Qt学习例子13鈥斺擟ustomitem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值