|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这只是我自己练习写的一个程序,其实做动画,QT有专用的qt quick application创建文件,用QML做出有很流畅效果的动画来。我因为是初学先练一下简单的线程绘图,里面有许多BUG只供大家参考
widget.cpp
- #include "widget.h"
- #include "ui_widget.h"
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
- time = new QTimer(this);
- connect(ui->pushButton,&QPushButton::clicked,this,&Widget::startT);//启动计时器
- initOne();//线程初始化
- connect(this,&Widget::destroyed,this,&Widget::closeThread);//程序退出后关闭进程
- }
- Widget::~Widget()
- {
- delete ui;
- }
- void Widget::getImage(QImage image)
- {
- myImage = image;
- update();
- }
- void Widget::paintEvent(QPaintEvent *)
- {
- QPainter p(this);
- p.drawImage(50,50,myImage);
- }
- void Widget::closeThread()
- {
- thread->quit();
- thread->wait();
- delete myt;
- }
- void Widget::initOne()
- {
- myt = new MyThread;//给我新建的继承QObject的类分配空间
- thread = new QThread(this);//创建一个线程对象
- myt->moveToThread(thread);//把我的对象挂载到线程上
- thread->start();//启动线程
- /*通过每秒发送QTimer的timeout信号来调用我线程里画图函数*/
- connect(time,&QTimer::timeout,myt,&MyThread::drawImage);
- /*画图函数里发送的信号来给getImage槽函数传值*/
- connect(myt,&MyThread::updataImage,this,&Widget::getImage);
- }
- void Widget::startT()
- {
- time->start(100);
- }
- void Widget::on_pushButton_2_clicked()//通过ui界面的转到槽功能来停止计时器
- {
- time->stop();
- }
复制代码
mythread.cpp
- #include "mythread.h"
- #include <Qt>
- #include <QPainter>
- #include <qmath.h>
- MyThread::MyThread(QObject *parent) : QObject(parent)
- {
- x1=10,y1=10,x2=10,y2=10;
- points[0]=QPoint(10,10);
- points[1]=QPoint(10,90);
- }
- void MyThread::drawImage()
- {
- QImage image(100,100,QImage::Format_ARGB32);
- QPen pen(Qt::SolidLine);
- pen.setColor(Qt::red);
- pen.setWidth(5);
- p = new QPainter(&image);
- p->setPen(pen);
- drawLine();
- emit updataImage(image);
- delete p;
- }
- /*以下画方形的代码BUG很多
- * 我只是瞎写的~
- */
- void MyThread::drawLine()
- {
- if(y2<90&&x2==10)
- {
- p->drawLine(x1,y1,x2,y2);
- y2++;
- }else if(x2<90&&y2>10)
- {
- p->drawPolyline(points,2);
- p->drawLine(10,90,x2,y2);
- x2++;
- }else if(y2>10&&x2==90)
- {
- points[2] = QPoint(90,90);
- p->drawPolyline(points,3);
- p->drawLine(90,90,x2,y2);
- y2--;
- }else
- {
- points[3] = QPoint(90,10);
- p->drawPolyline(points,4);
- p->drawLine(90,10,x2,y2);
- x2--;
- }
- }
复制代码 |
评分
-
查看全部评分
|