|
本帖最后由 765679550 于 2012-6-12 11:03 编辑
,现在运行两个简单的线程 一个GUI和一个数据发送线程。。
两个线程都能跑起来了,但是在执行GUI线程的时候有很卡的感觉,而且数据发送进程里面要是没有sleep(1);的话,GUI线程就直接不能运行起来了。。这是什么原因?线程需要设置什么东西吗?
mythread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread();
~MyThread();
protected:
void run();
signals:
void changeText(QString str);
};
#endif // MYTHREAD_H
widgett.h
#ifndef WIDGETT_H
#define WIDGETT_H
#include <QtGui/QMainWindow>
#include "ui_widgett.h"
class WidgetT : public QMainWindow
{
Q_OBJECT
public:
WidgetT(QWidget *parent = 0, Qt::WFlags flags = 0);
~WidgetT();
private:
Ui::WidgetTClass ui;
private slots:
void labelSetText(QString qstr);
};
#endif // WIDGETT_H
mythread.cpp
#include "mythread.h"
MyThread::MyThread()
: QThread()
{
}
MyThread::~MyThread()
{
}
void MyThread::run()
{
static int i=0;
while(true)
{
++i;
QString strnum = QString::number(i);
emit changeText(strnum); //发射数据
QThread::sleep(1);
} exec();
}
widgett.cpp
#include "widgett.h"
#include "mythread.h"
Q_DECLARE_METATYPE(QString);
WidgetT::WidgetT(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
MyThread *mythread = new MyThread;
int id=qRegisterMetaType<QString>("");
connect(mythread,SIGNAL(changeText(QString)),this,SLOT(labelSetText(QString)),Qt::QueuedConnection);
mythread->start();
}
WidgetT::~WidgetT()
{
}
void WidgetT::labelSetText(QString qstr)
{
ui.label->setText(qstr); //
/*
这里还有很多处理的程序,
*/
}
void WidgetT::on_button_clicked(QString qstr)
{
ui.label->setText("A"); //
/*
还有一个数据的简单处理部分
*/
}
|
|