Qt使用线程更新界面

程序逻辑

程序代码

test_image.h

class TestImage: public QObject
{
    Q_OBJECT

public:
    TestImage(QObject* parent=nullptr);

signals:
    //发送渲染图片
    void updateImage(QImage image);

public slots:
    //线程中渲染图片
    void onDrawImage();
};

test_image.cpp

#include "test_image.h"

TestImage::TestImage(QObject* parent): QObject(parent)
{

}

void TestImage::onDrawImage()
{
     /**/
    QImage image;
    emit updateImage(image);
}

test_ui.h

class TestUi: public QObject
{
    Q_OBJECT

public:
    TestUi(QObject* parent=nullptr);
    ~TestUi();

signals:
    void drawImage();

public slots:
    void onUpdateImage(QImage image);


private:
    TestImage m_testImage;
    QThread m_thread;
};

test.ui.cpp

#include "test_ui.h"

TestUi::TestUi(QObject* parent): QObject(parent)
{
    m_testImage.moveToThread(&m_thread);
    //调用线程处理复杂逻辑
    connect(this, &TestUi::drawImage, &m_testImage, &TestImage::onDrawImage);
    //回到主线程显示界面
    connect(&m_testImage, &TestImage::updateImage, this, &TestUi::onUpdateImage);
}

TestUi::~TestUi()
{
    m_thread.quit();
    m_thread.wait();
}

void TestUi::onUpdateImage(QImage image)
{
    /**/
}

补充1-绘图相关程序

绘图4要素:画布,画师,画笔,画刷

程序示例

{    
    //定义绘图设备
    QImage image(500, 500, 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 points[]=
    {
        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(points, 5);
}

补充2-更新主界面程序

  • 定义类继承QWidget
  • 重写更新界面操作
void Widget::paintEvent(QPaintEvent* paint)
{
    QPainter p(this);
    QImage image;
    p.drawImage(50, 50, image);
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值