Qt 创建线程,主次线程相互传参(多个参数)

本文介绍了一个使用Qt框架实现的信号与槽机制示例,详细展示了如何在主线程和工作线程之间通过信号和槽传递数据。具体实现了按钮点击触发信号后,将参数传递给工作线程进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//myproject.h
#include <QDialog>
#include <QWidget>
#include <QLineEdit>

class MyProjiect : public QWidget
{
	Q_OBJECT

public:
	MyProjiect(QWidget *parent=0);
	~MyProjiect();

	QPushButton * pOk;

signals:
	emitSaveTOsignal(QList<QString>);

public slots:
	slotSave();
	
};

//myproject.cpp
#include "myproject.h"

MyProjiect::MyProjiect()
{
	pOk = new QPushButton;

	pOk->setText("enter");
	pOk->setFixedSize(306, 40);
	connect(pOk, SIGNAL(clicked()), this, SLOT(slotSave()));//连接1

	m_thread = new ThreadHandle();//该类必须是QObject的子类
	connect(pOk, SIGNAL(emitSaveTOsignal(QList<QString>)), m_thread, SLOT(slotFunc(QList<QString>)));//接连2

	//(开始执行线程)
	m_thread->start();
}

MyProjiect::slotSave() 通过连接1的槽函数 进行入参赋值, 在通过信号传参
{
	QList<QString> strlist;
	strlist.at(0) = QString("filepath...");
	strlist.at(1) = QString("data");
	/*  ........   */
	
	emit(emitSaveTOsignal(strlist));
}

MyProjiect::~MyProjiect()
{
}
//threadhandle.h
#ifndef THREADHANDLE_H
#define THREADHANDLE_H

#include <QObject>
#include <QThread>

class ThreadHandle : public QThread
{
	Q_OBJECT

public:
	ThreadHandle(QWidget *parent = 0);
	~ThreadHandle();

protected:
	void run();

public:
	bool signalFlag;
	QString signalInfo;
	QString filepath;
	QString timeStamp;

	bool  fun(QString filepath);
	bool  fun_1(QString filepath);
	bool  fun_2(QString filepath);

private slots:
	void slotFunc(QList<QString> sList);
};

#endif // THREADHANDLE_H
//threadhandle.cpp
#include "threadhandle.h"

ThreadHandle::ThreadHandle(QWidget *parent)
 : QThread()
{
	 signalFlag = false;
	 signalInfo = "\0";
	 filepath   = "\0";
	 timeStamp  = "\0";
}

void ThreadHandle::run()
{
	while (1)
	{
		if (signalFlag == true)

		{
			if (signalInfo == "A")
			{
				func(filepath);
				signalInfo = "\0";
				timeStamp = "\0";
			}
			else if (signalInfo == "B")
			{
				func_1(filepath);
				signalInfo = "\0";
				timeStamp = "\0";
			}
			else if (signalInfo == "C")
			{
				func_2(filepath);
				signalInfo = "\0";
				timeStamp = "\0";
			}
			
			signalFlag = false;
		}
	}
}

bool  ThreadHandle::func(QString filepath)
{
}

bool  ThreadHandle::func_1(QString filepath)
{
}

bool  ThreadHandle::func_2(QString filepath)
{
}

void ThreadHandle::slotFunc(QList<QString> sList)
{
	 signalInfo = sList.at(0);
	 filepath   = sList.at(1);
	 timeStamp = sList.at(2);
	 signalFlag = true;
}

ThreadHandle::~ThreadHandle()
{
}


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值