Просто для того, чтобы набросать решение, используя потоки, которые я много раз использовал для ведения журналов и которые работают как нужно:
Определите свой класс потоков:
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();
, где logMessageFromThread
делает что-то вроде myPlainTextEdit->appendPlainText(message)
.Это работает без каких-либо задержек или других проблем.
Надеюсь, это поможет.