用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_OBJECT
public:
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()
{
}