教程简单明了,一看就懂。
首先来看线程类:textTread
texttread.h
#ifndef TEXTTREAD_H
#define TEXTTREAD_H
#include <<A class=keylink href="http://www.it165.net/pro/pkqt/" target=_blank>QT</A>hread>
class textTread : public <A class=keylink href="http://www.it165.net/pro/pkqt/" target=_blank>QT</A>hread
{
Q_OBJECT
public:
textTread();
void run();
signals:
void sendGUIThreadData(QString str); //向主线程通信的信号
public slots:
void GetGUIThreadID(int mThreadID); //接受主线程通讯过来数据的槽
private:
int ThreadID;
};
#endif // TEXTTREAD_H
再来看 texttread.cpp
#include "texttread.h"
#include <qDebug>
textTread::textTread()
{
}
void textTread::run()
{
qDebug() << tr("Thread is Open,ThreadID : %1").arg(ThreadID);
//You can do anything in here 嗨嗨拽两句鸟文
}
void textTread::GetGUIThreadID(int mThreadID) //接受主线程通讯过来的数据
{
ThreadID = mThreadID;
}
再看在GUI主线程实现50个线程的代码:
const int LENGTH = 50;
textTread *tread;
tread = new textTread[LENGTH];
for(int i=0;i<=LENGTH-1;i++){
connect(this,SIGNAL(SendGUIThreadID(int)),&tread[i],SLOT(GetGUIThreadID(int)));
connect(&tread[i],SIGNAL(sendGUIThreadData(QString)),this,SLOT(GetGUIThreadData(QString)));
emit SendGUIThreadID(i);
tread[i].start();
}
声明类的指针数组。
然后循环绑定信号与槽,最后循环用Start()运行线程,注意此处new 出的类数组,后面用的是.而不是-> 。