思路:
结果:
点击刷新图片,自动绘制一个六点连接图
线程类的属性
线程类的函数实现
void MyThread::drawImage(){ //Qimage设备 QImage image(600,600,QImage::Format_ARGB32); //画家 QPainter p(&image); //画笔,画刷 QPen pen; pen.setWidth(3); p.setPen(pen); QBrush brush; brush.setStyle(Qt::Dense6Pattern); p.setBrush(brush); //点 QPoint pos[6]={ QPoint(qrand()%600,qrand()%600),QPoint(qrand()%600,qrand()%600), QPoint(qrand()%600,qrand()%600),QPoint(qrand()%600,qrand()%600), QPoint(qrand()%600,qrand()%600),QPoint(qrand()%600,qrand()%600) }; //绘制Qimage p.drawPolygon(pos,6); static int i=0; i++; qDebug()<<"分支线程被调用"<<i; //发送信号 emit sendImage(image); }
wiget类的属性
widget类的函数实现
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //创建线程对象 pThread=new QThread(this); pMyThread=new MyThread; //添加线程对象 设置自建类的父对象为pThread pMyThread->moveToThread(pThread); //启动线程 pThread->start(); //每当按下按钮,启动线程函数 connect(ui->pushButton,&QPushButton::pressed, pMyThread,&MyThread::drawImage); //把分支线程发送过来的Qimage显示在窗口上,刷新页面 connect(pMyThread,&MyThread::sendImage,this,&Widget::recvImage); //结束线程对象 connect(this,&QWidget::destroyed,this,&Widget::closeThread); } //接受传递的Image,刷新图片,让绘图事件处理 void Widget::recvImage(QImage temp){ image = temp; update();//刷新界面 } //绘图事件 void Widget::paintEvent(QPaintEvent *event){ QPainter p(this); p.drawImage(40,40,image); } //关闭线程的处理函数 void Widget::closeThread(){ pThread->quit(); pThread->wait(); delete pMyThread; } Widget::~Widget() { delete ui; }