首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTextEdit附加问题

QTextEdit附加问题
EN

Stack Overflow用户
提问于 2017-03-19 12:17:59
回答 1查看 887关注 0票数 1

我想从文件中读取一些文本,并在QTextEdit中显示。文件大约是2MB。我创建了QObject类,并将信号和插槽与线程连接起来。问题是,即使线程正在运行,它仍然会冻结窗口。

我的代码:

QObject类:

代码语言:javascript
复制
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窗口:

代码语言:javascript
复制
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();

怎么修呢?提前谢谢你的帮助。

更新:我决定使用QtConcurrent

代码:

代码语言:javascript
复制
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;
}

没有错误,没有警告,但是它会阻塞窗口(GUI)几秒钟。

EN

回答 1

Stack Overflow用户

发布于 2017-03-19 13:56:50

使用QPlainTextEdit。来自QT文档:

QPlainTextEdit是支持纯文本的高级查看器/编辑器。对其进行了优化,以处理大型文档并快速响应用户输入。

希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42886465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档