用数据轰炸时优化QPlainTextEdit小部件

Optimizing QPlainTextEdit Widget When Bombarded with Data?

本文关键字:QPlainTextEdit 小部 优化 数据      更新时间:2023-10-16

所以基本上我拥有的是一个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?