您的位置:首页 > 编程语言 > Qt开发

【QT】窗口绘制之几何图形和动画

2017-06-07 22:29 405 查看




MyWidget.cpp

#include "Mywidget.h"
#include "MyWidget.h"
#include <QTimerEvent>
#include <QPainter>
MyWidget::MyWidget(QWidget *parent)
{
m_timerID=startTimer(1000);
m_marks=0;
}

void MyWidget ::paintEvent(QPaintEvent*event)
{
QPainter painter(this);
int width=this->width();
int height=this->height();
painter.setBrush(QColor(0x00,0x00,0x00));
painter.drawRect(0,0,width,height);

if(m_marks==1)
{
painter.setPen(QColor(0xFF,0xFF,0xFF));
painter.drawEllipse(width/2,height/2,200,150);
m_marks=0;
}
else
{
painter.setPen(QColor(0xFF,0xFF,0xFF));
painter.drawRect(width/2-100,height/2-150,200,150);
m_marks=1;
}

}
void MyWidget::timerEvent(QTimerEvent *event)
{
if (event->timerId()==m_timerID)
{
update();
}
}


MyWidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QFrame>

class MyWidget : public QFrame
{
public:
MyWidget(QWidget *parent);
private:
void paintEvent(QPaintEvent*event);
void timerEvent(QTimerEvent *event);
public:
int m_timerID;
int m_marks;
};

#endif // MYWIDGET_H


main.cpp

#include "Mywidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

MyWidget w(NULL);

w.show();

return a.exec();
}


程序说明:

1、练习使用QT的绘图功能、定时器功能。

2、设置定时器每一秒产生一个绘图事件update(),加入到事件循环中,等到主循环的下一轮中才会轮到绘制执行。

3、创建一个类——绘制图形的窗口MyWidget,继承与QFrame。

4、重写private类型的虚函数:

# include < QPainter>
void paintEvent(QPaintEvent*event);


使用选择语句,判断m_times这一状态变量:

if(m_marks==1)  {绘制椭圆;m_marks=0;}
else  {绘制矩形;m_marks=1;}


5、使用定时器:

void MyWidget::timerEvent(QTimerEvent *event)


调用重新绘图函数:

update();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt