QThread调用外部子函数怎么将信息emit

产生一个子线程,遍历文件夹,然后将信息打印在主界面上。

1.子类化QThread可以产生一个新的线程,重构虚函数run()。子线程和主线程的通信是利用signal-slot机制,子线程将信息通过emit signal(“信息”)发送给主线程

class NewThread : public QThread

{  Q_OBJECT

public: NewThread(const QString strval)  {   filepath=strval;  };

protected:  void run(); 

private:  QString filepath;

signals:  void TestSignal(QString);

};

void NewThread::run() {  

wchar_t path[260]={0};  

filepath.toWCharArray(path);

 emit TestSignal(filepath);  }

2.主线程中先产生thread类,然后运行,在connect,在slot函数中对接收到的信息进行处理。

NewThread *playthread = new NewThread((const QString )s.path());
 playthread->start();
 connect(playthread, SIGNAL(TestSignal(QString)),this, SLOT(GetInfo(QString)));

3.在子线程中调用外部子函数,但是emit机制在外部函数中是不能使用的,怎样将子函数中的信息再传给子线程中emit?

  解决方法:

   emit的signal-slot机制只能在QObject的类或者子类中使用,不能在外部函数中工作,将外部函数拷贝到子类中,做成类成员函数,就可以实现emit。

4.QTextEidt的几个技巧:

     setText(val)----设置为val;

     append(val)-----将val加在TextEidt光标后面,但是每写入一次都会换行;

    insertPlainText(val)+moveCursor(QTextCursor::End)-----将val加在TextEidt光标后面,然后将光标置于末端。

posted on 2015-06-24 14:53  粪斗的渣渣  阅读(1135)  评论(0编辑  收藏  举报