gpt4 book ai didi

c++ - 在数据轰炸时优化 QPlainTextEdit 小部件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:27 26 4
gpt4 key购买 nike

基本上我拥有的是一个 Qt 应用程序,它有一个主 GUI 线程和一个辅助线程。

工作线程是这样的:

void Client::readResults(int msgqid, pid_t pid)
{
int ret;
msg_t message;

connect(this, SIGNAL(dataReceived(QString)), this, SLOT(updateDisplay(QString)));
connect(this, SIGNAL(doneProcessing(QString)), this, SLOT(updateStatus(QString)));

for (;;)
{
ret = msgrcv(msgqid, &message, MSGSIZE, pid, 0);
if (ret == -1)
{
showStatusBarError("msgrcv");
return;
}

if (ret > 0)
{
emit dataReceived(QLatin1String(message.info));

if (message.is_eof)
{
emit doneProcessing("Done!");
break;
}
}
}
}

它所做的只是从消息队列中读取并发出一个信号,使主 GUI 线程(产生该线程)的 QPlainTextEdit 小部件调用 appendPlainText(message.info),以便从消息队列接收到的数据附加到小部件。

问题是如果我从队列中读取大量数据(它实际上是一个大约 30MB 或更多的文本文件),整个 GUI 就会挂起,直到工作线程完成。有没有办法让它不挂起,并让用户真正看到 QPlainTextEdit 小部件在从工作线程接收数据时滚动?

谢谢!

最佳答案

我之前遇到过类似的问题。就我而言,根据我的经验,信号/槽系统似乎锁定了程序流。当你读入大量数据或频繁读入某些数据时,自然会导致 GUI 变慢。

对我有用的是使用基于模型的输入,它允许稳定和平滑的更新。您可能需要考虑重新定位输入,以便您可以直接从输入读取到 GUI?

关于c++ - 在数据轰炸时优化 QPlainTextEdit 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9206214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com