我最好的建议是创建一个 subclass QThread。向这个子类传递一个指向目录的指针,并给它一个指向您想要通过以下方式更新的有效(非空)视图的指针:
头文件.h
class SearchAndUpdate : public QThread
{
    Q_OBJECT
public:
    SearchAndUpdate(QStringList *files, QWidget *widget);
    //The QWidget can be replaced with a Layout or a MainWindow or whatever portion
    //of your GUI that is updated by the thread.  It's not a real awesome move to
    //update your GUI from a background thread, so connect to the QThread::finished()
    //signal to perform your updates.  I just put it in because it can be done.
    ~SearchAndUpdate();
    QMutex mutex;
    QStringList *f;
    QWidget *w;
    bool running;
private:
    virtual void run();
};
然后在该线程的实现中执行以下操作:
线程.cpp
SearchAndUpdate(QStringList *files, QWidget *widget){
     this->f=files;
     this->w=widget;
}
void SearchAndUpdate::run(){
    this->running=true;
    mutex.lock();
    //here is where you do all the work
    //create a massive QStringList iterator
    //whatever you need to complete your 4 steps.
    //you can even try to update your QWidget *w pointer
    //although some window managers will yell at you
    mutex.unlock();
    this->running=false;
    this->deleteLater();
}
然后在您的 GUI 线程中维护有效的指针QStringList *files和SearchAndUpdate *search,然后执行以下操作:
files = new QStringList();
files->append("path/to/file1");
...
files->append("path/to/fileN");
search = new SearchAndUpdate(files,this->ui->qwidgetToUpdate);
connect(search,SIGNAL(finished()),this,SLOT(threadFinished()));
search->start();
...
void threadFinished(){
    //update the GUI here and no one will be mad
}