Qt 使用QGraphicsItem绘制复杂的图形


程序运行截图如下:

原理:使用QPainter一个部分,一个部分的画

源码:

mygraphicsitem.h

 1 ifndef MYGRAPHICSITEM_H  2 #define MYGRAPHICSITEM_H
 3  
 4 #include <QGraphicsItem>
 5  
 6 class MyGraphicsItem:public QGraphicsItem  7 {  8 public:  9     MyGraphicsItem(QGraphicsItem *parent=0); 10     ~MyGraphicsItem(); 11  
12 protected: 13     QRectF boundingRect()const; 14     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); 15 }; 16  
17 #endif // MYGRAPHICSITEM_H

widget.h

 1 #ifndef WIDGET_H  2 #define WIDGET_H
 3  
 4 #include <QWidget>
 5 class QGraphicsScene;  6  
 7 namespace Ui {  8 class Widget;  9 } 10  
11 class Widget : public QWidget 12 { 13  Q_OBJECT 14  
15 public: 16     explicit Widget(QWidget *parent = 0); 17     ~Widget(); 18  
19 private: 20     Ui::Widget *ui; 21     QGraphicsScene *m_scene; 22 }; 23  
24 #endif // WIDGET_H

main.cpp

 1 #include "widget.h"
 2 #include <QApplication>
 3  
 4 int main(int argc, char *argv[])  5 {  6  QApplication a(argc, argv);  7  Widget w;  8  w.show();  9  
10     return a.exec(); 11 }

mygraphicsitem.cpp

 1 #include "mygraphicsitem.h"
 2 #include <QPainter>
 3 #include <QPen>
 4 #include <QRectF>
 5  
 6 MyGraphicsItem::MyGraphicsItem(QGraphicsItem *parent):  7  QGraphicsItem(parent)  8 {  9     setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable); 10 } 11  
12 MyGraphicsItem::~MyGraphicsItem() 13 { 14  
15 } 16  
17 QRectF MyGraphicsItem::boundingRect() const
18 { 19     return QRectF(-14,-50,55,70); 20 } 21  
22 void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 23 { 24  Q_UNUSED(option) 25  Q_UNUSED(widget) 26     painter->setPen(QPen(Qt::white,1)); 27     painter->drawRect(-14,-50,55,70); 28     painter->setPen(QPen(Qt::red,2)); 29     painter->drawLine(0,0,0,10); 30     painter->drawLine(0,10,30,10); 31     painter->drawLine(30,10,30,0); 32     painter->drawLine(15,10,15,-20); 33     painter->drawLine(15,-20,0,-20); 34     QRectF rectangle(0,-33,30,30); 35     int startAngle=-180*16; 36     int spanAngle=270*16; 37     painter->drawArc(rectangle, startAngle, spanAngle); 38     painter->drawLine(15,-35,15,-40); 39 }

widget.cpp

 1 #include "widget.h"
 2 #include "ui_widget.h"
 3 #include "mygraphicsitem.h"
 4 #include <QGraphicsScene>
 5  
 6 Widget::Widget(QWidget *parent) :  7  QWidget(parent),  8     ui(new Ui::Widget)  9 { 10     ui->setupUi(this); 11     m_scene=new QGraphicsScene; 12     ui->graphicsView->setScene(m_scene); 13     ui->graphicsView->setRenderHint(QPainter::Antialiasing); 14     m_scene->setBackgroundBrush(QBrush(Qt::black)); 15     MyGraphicsItem *item=new MyGraphicsItem; 16     item->setPos(0,0); 17     m_scene->addItem(item); 18 } 19  
20 Widget::~Widget() 21 { 22     delete ui; 23 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM