“实时”更新 Qt TextView

2024-02-16

我有一个带有嵌入式脚本/jit 的 Qt 应用程序。现在我想接收 QTextEdit 上脚本的输出(更具体的是 QPlainTextEdit)。为此目的,正在发出回调。我面临的问题是,无论我尝试什么,文本编辑的输出要么延迟到脚本完成,要么在 2-3 秒后卡住(然后延迟到脚本完成)。 我尝试使用信号和槽进行更新,但也尝试使用直接函数调用 - 都不起作用。还重新绘制/更新 TextEdit 和父表单,甚至 QCoreApplication::flush() 确实显示出很少/没有效果。看来我正在做一些根本错误的事情。有什么想法或例子如何实现“实时”更新?

顺便说一句,正在调用更新例程 - 可以实时获得到标准输出的调试输出。


只是为了绘制一个使用线程的解决方案,我已经多次使用线程来记录日志,并且它可以按需要工作:

定义你的线程类:

class MyThread : public QThread
{
  Q_OBJECT
public:
  MyThread(QObject *parent=0) : QThread(parent) {}
signals:
  void signalLogMessage(const QString &logMessage);

...
};

每当您希望在主线程中显示日志消息时,只需使用

emit signalLogMessage("Foo!");

在你的主线程中:

MyThread *thread = new MyThread(this);
connect(thread, SIGNAL(signalLogMessage(const QString&)), 
        this, SLOT(logMessageFromThread(const QString&)));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
...
thread->start();

where logMessageFromThread做类似的事情myPlainTextEdit->appendPlainText(message)。 这可以正常工作,不会出现任何延迟或其他问题。

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“实时”更新 Qt TextView 的相关文章

随机推荐