QThread中moveToThread的用法

一、创建对象,要继承Qbject

TableItem.h

#pragma once

#include <QObject>
#include <QTableWidget>
#include <QThread>
#include <QDebug>
class TableItem : public QObject
{
	Q_OBJECT

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

	bool bFlag = false;

public slots:
	//void SetTableItem(int row, int col, QString strText, QTableWidget* pTable);

	void SetTableItem();
};

TableItem.cpp

#include "TableItem.h"

#pragma execution_character_set("utf-8")
TableItem::TableItem(QObject *parent)
	: QObject(parent)
{
}

TableItem::~TableItem()
{
}

void TableItem::SetTableItem(/*int row, int col, QString strText, QTableWidget* pTable*/)
{
	while (1)
	{
		qDebug() << "子线程ID:" << QThread::currentThreadId();
		if (bFlag)
		{
			break;
		}

	}
	bFlag = false;
}

ThreadDemo.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_ThreadDemo.h"
#include <QThread>
#include "TableItem.h"
#include <QDebug>

class ThreadDemo : public QWidget
{
	Q_OBJECT

public:
	ThreadDemo(QWidget *parent = Q_NULLPTR);
	void initUI();


private:
	Ui::ThreadDemoClass ui;
	QThread* m_pThread = nullptr;
	TableItem* m_pTableItem = nullptr;


public slots:
	void on_pushButton_clicked();
	void on_pushButtonStop_clicked();
signals:
	void startThreadSignal(/*int& row, int& col, QString& strText, QTableWidget* pTable*/);
};

ThreadDemo.cpp

#include "ThreadDemo.h"

#pragma execution_character_set("utf-8")
ThreadDemo::ThreadDemo(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	initUI();

	m_pThread = new QThread(this);
	m_pTableItem = new TableItem;//不能指定父对象且禁止在线程对象中操作UI
	m_pTableItem->moveToThread(m_pThread);
	bool b = connect(this, &ThreadDemo::startThreadSignal, m_pTableItem, &TableItem::SetTableItem);
	int a = 0;
}

void ThreadDemo::initUI()
{
	QStringList listHeader;
	ui.tableWidget->setColumnCount(2);
	listHeader << "数量" << "价格";
	ui.tableWidget->setHorizontalHeaderLabels(listHeader);
}

void ThreadDemo::on_pushButton_clicked()
{
	//开启线程,但没有开启线程函数,需要通过信号的方式去开启线程函数
	qDebug() << "主线程ID:" << QThread::currentThreadId();
	m_pThread->start();
	emit startThreadSignal(/*nRow,nCol, QString("2222"), ui.tableWidget*/);
}

void ThreadDemo::on_pushButtonStop_clicked()
{
	m_pTableItem->bFlag = true;
	m_pThread->quit();
	m_pThread->wait();
}

main函数

#include "ThreadDemo.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	ThreadDemo w;
	w.show();
	return a.exec();
}

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值