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_Hflashitem.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
- Qt实现自定义QGraphicsItem,实现了一个闪烁的圆,和闪烁的文字
- android 自定义Textview多层边框,实现了文字内容闪烁的功能!
- [Latex]实现文字闪烁的示例
- 用LCD 实现文字图形的移动和闪烁
- LinearGradient和Matrix实现动态的文字闪烁效果
- 闪烁字体的实现
- 实现文字闪烁效果
- Android自定义TextView闪烁文字的效果
- 玩家复活闪烁的实现
- js实现图片的闪烁
- PLC闪烁电路的实现
- Handler实现TextView文字闪烁
- 子函数调用方式实现一个发光二极管的闪烁,闪烁时间为500ms
- FPGA 降频实现led的闪烁,LED不闪烁
- 文字闪烁和图片闪烁
- 自定义闪烁的TextView
- 单片机实现灯左右移动和闪烁的程序
- 单片机设计流水灯和实现LED的闪烁
- 点击类别,并通过Toast将类别的名字显示出来
- Objective-C中#import如何规避多文件结构导致的重复包含;以及@class作用
- MySQL性能优化的20条经验
- java泛型详解
- java中的this和super
- Qt实现自定义QGraphicsItem,实现了一个闪烁的圆,和闪烁的文字
- Linux应用程序错误使用pthread_mutex_lock互斥锁触发SIG_ABRT信号的原因分析
- ImageView以淡入淡出的方式切换显示的图片
- <context-param>与<init-param>的区别与作用
- bootstrap结合easyui-datagrid列宽不自动适应问题
- ContentNegotiatingViewResolver解析器
- 对一个类里面的数组添加观察时注意问题
- ActionContext和ServletActionContext
- 多线程为什么比单线程快呢?