绘画类 ,发送自动生成的Image图像。
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QImage>
#include <QObject>
class myThread : public QObject
{
Q_OBJECT
public:
explicit myThread(QObject *parent = 0);
signals:
void updatImage(QImage);
public slots:
void drawImage();
};
#endif // MYTHREAD_H
#include "mythread.h"
#include <QPainter>
myThread::myThread(QObject *parent) : QObject(parent)
{
}
void myThread::drawImage()
{
QImage image(600,600,QImage::Format_ARGB32);
QPainter p(&image);
QPen pen;
pen.setWidth(5);
p.setPen(pen);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
brush.setColor(Qt::red);
p.setBrush(brush);
QPoint a[]=
{
QPoint(qrand()%500,qrand()%500),
QPoint(qrand()%500,qrand()%500),
QPoint(qrand()%500,qrand()%500),
QPoint(qrand()%500,qrand()%500),
QPoint(qrand()%500,qrand()%500)
};
p.drawPolygon(a,5);
emit updatImage(image);
}
多线程方法调用并绘画
#include "widget.h"
#include "ui_widget.h"
#include"mythread.h"
#include <QPainter>
#include <QThread>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
myT=new myThread;
thread =new QThread(this);
myT->moveToThread(thread);
thread->start();
connect(ui->pushButton,SIGNAL(pressed()),myT,SLOT(drawImage()));
connect(myT,&myThread::updatImage,this,&Widget::getImage);
connect(this,SIGNAL(destroyed(QObject *)),this,SLOT(dealClose(QObject *)));
}
void Widget::dealClose(QObject *sd)
{
thread->quit();
thread->wait();
delete myT;
}
Widget::~Widget()
{
delete ui;
}
void Widget::getImage(QImage img)
{
this->image=img;
update();
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter p(this);//
p.drawImage(50,50,image);
}
点击button随机生成五点几何图形。