日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建图元

發(fā)布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建图元 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

創(chuàng)建圖元

  • 程序
    • 主窗口函數(shù)(各種圖元的顯示)
    • 閃爍橢圓函數(shù)
    • 星星動畫函數(shù)
  • 效果展示

程序

主窗口函數(shù)(各種圖元的顯示)

.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGraphicsScene>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();void initScene(); //初始化場景void createActions(); //創(chuàng)建主窗體的所有動作void createMenus(); //創(chuàng)建主窗體的菜單欄 public slots:void slotNew(); //新建一個顯示窗體void slotClear(); //清除場景中所有的圖元void slotAddEllipseItem(); //在場景中加入一個橢圓形圖元void slotAddPolygonItem(); //在場景中加入一個多邊形圖元void slotAddTextItem(); //在場景中加入一個文字圖元void slotAddRectItem(); //在場景中加入一個長方形圖元void slotAddAlphaItem(); //在場景中加入一個透明蝴蝶圖片void slotAddFlashItem(); //在場景中加入一個閃爍橢圓void slotAnimationItem(); //在場景中加入一個星星動畫 private:QGraphicsScene *scene;QAction *newAct;QAction *clearAct;QAction *exitAct;QAction *addEllipseItemAct;QAction *addPolygonItemAct;QAction *addTextItemAct;QAction *addRectItemAct;QAction *addAlphaItemAct;QAction *addFlashItemAct;QAction *addAnimItemAct; };#endif // MAINWINDOW_H .cpp #include "mainwindow.h" #include <QGraphicsView> #include <QMenu> #include <QMenuBar> #include <QGraphicsEllipseItem> #include "flashitem.h" #include "startitem.h" #include <QGraphicsItemAnimation> #include <QTimeLine>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {createActions();createMenus();scene=new QGraphicsScene;scene->setSceneRect(-200,-200,400,400);initScene();QGraphicsView *view=new QGraphicsView;view->setScene(scene);view->setMinimumSize(400,400);view->show();setCentralWidget(view);resize(550,450);setWindowTitle("Graphics Items"); }MainWindow::~MainWindow() {} void MainWindow::createActions() //創(chuàng)建主窗體的所有動作 {newAct = new QAction(tr("新建"),this);clearAct = new QAction(tr("清除"),this);exitAct = new QAction(tr("退出"),this);addEllipseItemAct = new QAction(tr("加入 橢圓"),this);addPolygonItemAct = new QAction(tr("加入 多邊形"),this);addTextItemAct = new QAction(tr("加入 文字"),this);addRectItemAct = new QAction(tr("加入 長方形"),this);addAlphaItemAct = new QAction(tr("加入 透明圖片"),this);addFlashItemAct =new QAction(tr("加入 閃爍圓"),this);addAnimItemAct =new QAction(tr("加入 星星"),this);connect(newAct,SIGNAL(triggered()),this,SLOT(slotNew()));connect(clearAct,SIGNAL(triggered()),this,SLOT(slotClear()));connect(exitAct,SIGNAL(triggered()),this,SLOT(close()));connect(addEllipseItemAct,SIGNAL(triggered()),this,SLOT (slotAddEllipseItem()));connect(addPolygonItemAct,SIGNAL(triggered()),this,SLOT (slotAddPolygonItem()));connect(addTextItemAct,SIGNAL(triggered()),this,SLOT (slotAddTextItem()));connect(addRectItemAct,SIGNAL(triggered()),this,SLOT (slotAddRectItem()));connect(addAlphaItemAct,SIGNAL(triggered()),this,SLOT (slotAddAlphaItem()));connect(addFlashItemAct,SIGNAL(triggered()),this,SLOT (slotAddFlashItem()));connect(addAnimItemAct,SIGNAL(triggered()),this,SLOT (slotAnimationItem())); } void MainWindow::createMenus() //創(chuàng)建主窗體的菜單欄 {QMenu *fileMenu = menuBar()->addMenu(tr("文件"));fileMenu->addAction(newAct);fileMenu->addAction(clearAct);fileMenu->addSeparator();fileMenu->addAction(exitAct);QMenu *itemsMenu = menuBar()->addMenu(tr("元素"));itemsMenu->addAction(addEllipseItemAct);itemsMenu->addAction(addPolygonItemAct);itemsMenu->addAction(addTextItemAct);itemsMenu->addAction(addRectItemAct);itemsMenu->addAction(addAlphaItemAct);itemsMenu->addAction(addFlashItemAct);itemsMenu->addAction(addAnimItemAct); } void MainWindow::initScene() //初始化場景 {int i;for(i=0;i<3;i++)slotAddEllipseItem();for(i=0;i<3;i++)slotAddPolygonItem();for(i=0;i<3;i++)slotAddTextItem();for(i=0;i<3;i++)slotAddRectItem();for(i=0;i<3;i++)slotAddAlphaItem();for(i=0;i<3;i++)slotAddFlashItem();for(i=0;i<3;i++)slotAnimationItem(); } void MainWindow::slotNew() //新建一個顯示窗體 {slotClear();initScene();MainWindow *newWin = new MainWindow;newWin->show(); } void MainWindow::slotClear() //清除場景中所有的圖元 {QList<QGraphicsItem*> listItem = scene->items();//一個QList存儲場景內(nèi)的圖元while(!listItem.empty()){scene->removeItem(listItem.at(0));//場景中清除圖元listItem.removeAt(0);//QList清除項} } void MainWindow::slotAddEllipseItem() //在場景中加入一個橢圓形圖元 {QGraphicsEllipseItem *item = new QGraphicsEllipseItem(QRectF(0,0,80,60));item->setPen(Qt::NoPen);item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));item->setFlag(QGraphicsItem::ItemIsMovable);scene->addItem(item);item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200); } void MainWindow::slotAddPolygonItem() //在場景中加入一個多邊形圖元 {QVector<QPoint> v;v<<QPoint(30,-15)<<QPoint(0,-30)<<QPoint(-30,-15)<<QPoint(-30,15)<<QPoint(0,30)<<QPoint(30,15);QGraphicsPolygonItem *item= new QGraphicsPolygonItem(QPolygonF(v));item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));item->setFlag(QGraphicsItem::ItemIsMovable);scene->addItem(item);item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200);} void MainWindow::slotAddTextItem() //在場景中加入一個文字圖元 {QFont font("Times",16);QGraphicsTextItem *item = new QGraphicsTextItem("Hello Qt");item->setFont(font);item->setFlag(QGraphicsItem::ItemIsMovable);item->setDefaultTextColor(QColor(qrand()%256,qrand()%256,qrand ()%256));scene->addItem(item);item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200); } void MainWindow::slotAddRectItem() //在場景中加入一個長方形圖元 {QGraphicsRectItem *item = new QGraphicsRectItem(QRectF(0,0, 60,60));QPen pen;pen.setWidth(3);pen.setColor(QColor(qrand()%256,qrand()%256,qrand()%256));item->setPen(pen);item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));item->setFlag(QGraphicsItem::ItemIsMovable);scene->addItem(item);item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200); } void MainWindow::slotAddAlphaItem() //在場景中加入一個透明蝴蝶圖片 {QGraphicsPixmapItem *item =scene->addPixmap(QPixmap("image.png"));item->setFlag(QGraphicsItem::ItemIsMovable);item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200); }void MainWindow::slotAddFlashItem()//在場景中加入一個閃爍橢圓 {FlashItem *item= new FlashItem;scene->addItem(item);item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200); }void MainWindow::slotAnimationItem()//在場景中加入一個星星動畫 {StartItem*item=new StartItem;QGraphicsItemAnimation *anim=new QGraphicsItemAnimation;//圖元動畫anim->setItem(item);QTimeLine *timeLine =new QTimeLine(4000);//時間軸timeLine->setCurveShape(QTimeLine::SineCurve);//播放模式timeLine->setLoopCount(0);anim->setTimeLine(timeLine);int y= (qrand()%400)-200;for(int i=0;i<400;i++){anim->setPosAt(i/400.0,QPointF(i-200,y));}timeLine->start();scene->addItem(item); }

閃爍橢圓函數(shù)

.h #ifndef FLASHITEM_H #define FLASHITEM_H#include <QObject> #include <QGraphicsItem>class FlashItem : public QObject,public QGraphicsItem {Q_OBJECT public:explicit FlashItem(QObject *parent = nullptr);QRectF boundingRect() const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);void timerEvent(QTimerEvent *event); private:bool flash;QTimer *timer; signals:public slots: };#endif // FLASHITEM_H .cpp #include "flashitem.h" #include <QPainter>FlashItem::FlashItem(QObject *parent) : QObject(parent) {flash=true;setFlag(ItemIsMovable);startTimer(1000); }QRectF FlashItem::boundingRect() const {qreal adjust=2;return QRectF(-10-adjust,-10-adjust,43+adjust,43+adjust); }void FlashItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {painter->setPen(Qt::NoPen);painter->setBrush(Qt::darkGray);painter->drawEllipse(-7,-7,40,40);painter->setPen(QPen(Qt::black,0));painter->setBrush(flash?(Qt::red):(Qt::yellow));painter->drawEllipse(-10,-10,40,40); }void FlashItem::timerEvent(QTimerEvent *event) {flash=!flash;update(); }

星星動畫函數(shù)

.h #ifndef STARTITEM_H #define STARTITEM_H #include <QGraphicsItem> #include <QPainter>class StartItem : public QGraphicsItem { public:StartItem();QRectF boundingRect() const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); private:QPixmap pix; };#endif // STARTITEM_H .cpp #include "startitem.h"StartItem::StartItem() {pix.load("star.png"); }QRectF StartItem::boundingRect() const {return QRectF(-pix.width()/2,-pix.height()/2,pix.width(),pix.height()); }void StartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {painter->drawPixmap(boundingRect().topLeft(),pix); }

效果展示

總結(jié)

以上是生活随笔為你收集整理的创建图元的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。