QT中的线程是不可以执行ui内容的,一般情况,执行逻辑运算就可以,
但是,如果让线程中用到ui,就需要用到 信号和槽 的机制了;
如果线程用到 信号和槽 ,线程的定义就需要放到主界面定义的文件中了(Q_OBJECT),否则编译出错;
部分代码如下:
#ifndef PROC_H
#define PROC_H
#include <QtGui/QMainWindow>
#include "ui_proc.h"
#include <QMessageBox>
//线程:
#include <QThread>
#include <QMessageBox>
class MYthread : public QThread
{
Q_OBJECT
public:
MYthread(){};
~MYthread(){};
protected :
void run()
{
FILE * f = fopen("A.txt","w+"); fclose(f);
for ( int i = 0; i<100; i++ )
{
sleep(1000);
signal1(); //当线程中的signal1()被调用,界面中的slot1()就相应;
}
}
signals:
void signal1(); //信号不需要具体实现;
//注意:QObject::connect( &pthr , SIGNAL(signal1()), this, SLOT(slot1())); 线程调用前要执行,可以放在相应ui的构造函数中;
};
class Proc : public QMainWindow
{
Q_OBJECT
public:
Proc(QWidget *parent = 0, Qt::WFlags flags = 0);
~Proc();
private:
Ui::ProcClass ui;
private slots:
void on_pushButton_2_clicked();
void on_pushButton_clicked();
void slot1() //当线程中的signal1()被调用,slot1()就相应;
{
QMessageBox::about(NULL,"","线程触发");
}
public:
MYthread pthr;
};
#endif // PROC_H