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光标后面,然后将光标置于末端。