qt使用线程依次读取多个文件
时间: 2023-08-03 15:02:31 浏览: 101
Qt实现的QTcpSocket 多客户端通信
3星 · 编辑精心推荐
可以使用Qt的QThread类来实现线程读取多个文件。
首先,创建一个自定义的线程类,继承自QThread类,在run()函数里实现读取文件的操作。
```C++
class ReadFileThread : public QThread
{
Q_OBJECT
public:
ReadFileThread(const QStringList& files);
signals:
void fileContentReady(const QString& fileName, const QString& content);
protected:
void run() override;
private:
QStringList m_files;
};
```
在run()函数里,循环读取每个文件的内容,并通过信号fileContentReady()将文件名和内容传递给主线程。
```C++
void ReadFileThread::run()
{
foreach (const QString& fileName, m_files) {
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
continue;
QTextStream in(&file);
QString content = in.readAll();
emit fileContentReady(fileName, content);
file.close();
}
}
```
接下来,在主线程中创建一个ReadFileThread对象,并连接它的fileContentReady()信号,以便在文件读取完成后进行处理。
```C++
QStringList files; // 待读取的文件列表
ReadFileThread* thread = new ReadFileThread(files);
connect(thread, &ReadFileThread::fileContentReady, [=](const QString& fileName, const QString& content) {
// 处理文件内容
});
thread->start();
```
最后,调用线程的start()函数开始读取文件。
完整代码如下:
```C++
class ReadFileThread : public QThread
{
Q_OBJECT
public:
ReadFileThread(const QStringList& files);
signals:
void fileContentReady(const QString& fileName, const QString& content);
protected:
void run() override;
private:
QStringList m_files;
};
ReadFileThread::ReadFileThread(const QStringList& files)
: m_files(files)
{
}
void ReadFileThread::run()
{
foreach (const QString& fileName, m_files) {
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
continue;
QTextStream in(&file);
QString content = in.readAll();
emit fileContentReady(fileName, content);
file.close();
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList files; // 待读取的文件列表
ReadFileThread* thread = new ReadFileThread(files);
connect(thread, &ReadFileThread::fileContentReady, [=](const QString& fileName, const QString& content) {
// 处理文件内容
});
thread->start();
return a.exec();
}
```
阅读全文