我有一个带有嵌入式脚本/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(使用前将#替换为@)