当前位置: 首页 > news >正文

QT中线程中使用信号和槽传数据

mainwindow.h 

#ifndef WORKERTHREAD_H
#define WORKERTHREAD_H

#include <QObject>
#include <QThread>
#include <QQueue>
class WorkerThread : public QThread
{
    Q_OBJECT
public:
    explicit WorkerThread();
private:
    void run() override;  //重新实现run()

signals:
    void sendData(float zhi);

};

#endif // WORKERTHREAD_H

workerthread.cpp 


#include <iostream>
#include "workerthread.h"
#include <QTimer>

WorkerThread::WorkerThread()
{

}


void WorkerThread::run()
{

    std::cout << "Thread started" << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(5)); // 延时2秒
    std::cout << "Thread finished" << std::endl;
    emit sendData(5.28);
}

mainwindow.h 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class WorkerThread;
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    WorkerThread* t;

private slots:
    void receiveData(float zhi);
};
#endif // MAINWINDOW_H

mainwindow.cpp 

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QApplication>

#include <QThread>
#include <QDebug>
#include <QTimer>

#include<workerthread.h>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    t=new WorkerThread;
    connect(t,&WorkerThread::sendData,this,&MainWindow::receiveData);
    t->start();
    //t->wait();  //线程执行完之前,会一直堵塞在这,一般用不上,因为用线程就是为了避免堵塞
}

void MainWindow::receiveData(float zhi){
    qDebug()<<"receive data from thread : "<<zhi;
}
MainWindow::~MainWindow()
{
    delete ui;
}


FR:徐海涛(hunklxu)

相关文章:

  • 阿里云一键部署DeepSeek-V3、DeepSeek-R1模型
  • Oracle DBA 诊断及统计工具-2
  • django中间件,中间件给下面传值
  • vue基础(八)
  • 2848、与车相交的点
  • 游戏引擎学习第103天
  • [FastAdmin] 上传图片并加水印,压缩图片
  • 重读《Java面试题,10万字208道Java经典面试题总结(附答案)》
  • 一种 SQL Server 数据库恢复方案:解密、恢复并导出 MDF/NDF/BAK文件
  • 【Elasticsearch】Mapping概述
  • 适用于iOS的应用商店优化(ASO)清单
  • Qt信号槽调用出错:Qt: Dead lock detected while activating a BlockingQueuedConnection
  • Anaconda 安装指南:Windows、macOS 和 Linux 的详细安装步骤
  • 轮子项目--消息队列的实现(3)
  • Redis初阶笔记
  • 【Linux】cron计划任务定时执行命令
  • 问界M8细节曝光,L3自动驾驶有了!
  • 【LeetCode】394. 字符串解码
  • Windows中指定路径安装DockerDesktop
  • 02、QLExpress从入门到放弃,相关API和文档
  • 大学2025丨专访清华教授沈阳:建议年轻人每天投入4小时以上与AI互动
  • 短剧剧组在贵州拍戏突遇极端天气,演员背部、手臂被冰雹砸伤
  • 一季度全国30强城市出炉:谁能更进一步?谁掉队了?
  • 科技赋能文化体验,“五一”假期“海昏侯”人气创新高
  • 李翔宁:城市的每个人都参与了上海的建造,这一过程还在持续
  • 巴基斯坦宣布禁止印度船只入港