I want to read some text from file and display in QTextEdit
. File is about 2 MB. I have created QObject
class and connect signals and slots with thread. The problem is it still freezes window even when the thread is running.
My code:
QObject class:
void TestReader::readTestFile()
{
QFile dbFile;
QTextStream dbTextStream;
dbFile.setFileName(":Test/Test.txt");
dbFile.open(QFile::ReadOnly);
dbTextStream.setDevice(&dbFile);
QString data;
while (!dbTextStream.atEnd()) {
data = dbTextStream.readLine();
emit testData(data);
}
emit finished();
}
GUI window:
readerThread = new QThread();
reader = new TestReader();
reader->moveToThread(readerThread);
connect(readerThread, &QThread::started, reader, &TestReader::readTestFile);
connect(reader, &TestReader::testData, this, &TestWindow::loadTestData);
connect(reader, &TestReader::finished, readerThread, &QThread::quit, Qt::DirectConnection);
readerThread->start();
How to fix it? Thanks in advance for your help.
Update:
I have decided to use QtConcurrent
.
Code:
dbFile.setFileName(":Test/Test.txt");
dbFile.open(QIODevice::ReadOnly);
dbTextStream.setDevice(&dbFile);
dbTextStream.setCodec("windows-1251");
QFuture<QString> myData = QtConcurrent::run(this, &TestWindow::loadTestData);
ui->plainTextEdit->appendPlainText(myData.result());
QString TestWindow::loadTestData()
{
QString data = dbTextStream.readAll();
return data;
}
No errors, no warnings but it blocks window (GUI) for seconds.