Qt实现自定义QGraphicsItem,实现了一个闪烁的圆,和闪烁的文字

来源:互联网 发布:软件ui设计 编辑:程序博客网 时间:2024/04/25 14:41

用Qt实现了一个闪烁的圆,这个挺简单的,


下面是具体的代码:

mian.cpp:

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}
mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QAction>#include <QMainWindow>#include <QGraphicsScene>#include <QGraphicsView>#include <QMenuBar>#include <QGraphicsEllipseItem>#include<QMenu>#include<QMenuBar>#include<QTime>#include<QTimer>class MainWindow : public QMainWindow{    Q_OBJECTpublic:     MainWindow(QWidget *parent = 0);    ~MainWindow();    QAction *newitemflash;    QAction *newtextflash;    QMenu  *additem;    QMenu  *addtext;    QGraphicsScene *scene;  //定义一个场景    QGraphicsView *view; //定义一个视图    QTimer *timer;    bool Flash;public slots:    void additemflash();    void addtextflash();    void newtimer();};#endif // MAINWINDOW_H


mainwindow.cpp:

#include "mainwindow.h"#include "flashitem.h"MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent){   this->setFixedSize(800,800);   newitemflash=new QAction(tr("newitemflash"),this);   newtextflash=new QAction(tr("newtextflash"),this);   additem=new QMenu(tr("AddItem"),this);   addtext=new QMenu(tr("AddText"),this);   additem->addAction(newitemflash);   addtext->addAction(newtextflash);   menuBar()->addMenu(additem);   menuBar()->addMenu(addtext);   scene=new QGraphicsScene;  //定义了一个布局   scene->setSceneRect(-300,-300,300,300);  //定义布局的边界   view=new QGraphicsView;    //定义了一个视图   view->setSceneRect(-300,-300,300,300);     timer=new QTimer(this); //定义一个定时器   connect(newitemflash,SIGNAL(triggered()),this,SLOT(additemflash()));   connect(newtextflash,SIGNAL(triggered()),this,SLOT(newtimer()));   connect(timer,SIGNAL(timeout()),this,SLOT(addtextflash()));   view->setScene(scene);   view->show();   setCentralWidget(view);  //实显示在主窗口}MainWindow::~MainWindow(){}void MainWindow::additemflash()//定时器的开始,用button控制{    flashitem *item1=new flashitem;    scene->addItem(item1);    item1->setPos(-100,-100);}void MainWindow::addtextflash(){    QFont font("Times",20);    QGraphicsTextItem *item = new QGraphicsTextItem("http://blog.csdn.net/zycxnanwang");    item->setFont(font);    item->setFlag(QGraphicsItem::ItemIsMovable); //可以移动    QColor A;    if(Flash==true)    A.setBlue(200);    else A.setGreen(200);    item->setDefaultTextColor(A);    scene->addItem(item);    item->setPos(-470,50);    Flash=!Flash;}void MainWindow::newtimer() //启动定时器{    Flash=true;    timer->start(100);}
flashitem.h

#ifndef FLASHITEM_H#define FLASHITEM_H#include<QObject>#include <QGraphicsScene>#include <QGraphicsView>#include <QGraphicsEllipseItem>class flashitem:public QObject,public QGraphicsItem{public:    bool flash; //这个用来标志重画函数    flashitem();    ~flashitem();    QRectF boundingRect() const; //这个函数是vitual必须重新实现,否则所定义的类难以实例化private:     void timerEvent(QTimerEvent *); //重新实现timeEvent这个函数,定时器的作用    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);};#endif // FLASHITEM_H
flashitem.cpp

#include"flashitem.h"void flashitem::timerEvent(QTimerEvent *){    flash=!flash;    this->update(); //估计重新执行paint这个函数}void flashitem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){    painter->setPen(Qt::blue);    painter->setBrush(flash?(Qt::red):(Qt::green));     painter->drawEllipse(-100,-100,100,100);}flashitem::flashitem(){    flash=true;    setFlag(ItemIsMovable);  //可以移动    startTimer(100); }QRectF flashitem::boundingRect() const  //静态函数{    return QRectF(-400,-400,400,400);}flashitem::~flashitem(){}






0 0
原创粉丝点击