c – “实时”更新Qt TextView

我有一个带有嵌入式脚本/ jit的Qt应用程序.现在我想在QTextEdit(更具体的QPlainTextEdit)上接收脚本的输出.为此目的,正在发布回调.我面临的问题是,无论我尝试输出到TextEdit,要么延迟到脚本完成,要么在2-3秒后卡住(并且延迟到脚本完成).

我试图使用信号和插槽进行更新,但也直接调用函数 – 两者都没有用.重新绘制/更新TextEdit和父窗体以及甚至QCoreApplication :: flush()确实显示很少/没有效果.好像我在做一些根本错误的事情.任何想法或例子如何实现“实时”更新?

顺便说一句,正在调用更新例程 – 调试输出到stdout是实时可用的.

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

定义你的线程类:

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

...
};

只要您想在主线程中显示日志消息,只需使用即可

发出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();

其中logMessageFromThread执行类似myPlainTextEdit-> appendPlainText(message)的操作.
这没有任何延迟或其他问题.

我希望有所帮助.

点赞