我有一个带有嵌入式脚本/ 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)的操作.
这没有任何延迟或其他问题.
我希望有所帮助.