線程類Demo:
InvokeThread::InvokeThread(QPlainTextEdit* edit, QObject *parent) : QThread(parent), m_edit(edit) { } void InvokeThread::run() { QString str = ""; for (int i = 0; i < 10; ++i) { str = QString("Subthread Id: %1, Time:%2").arg((unsigned)QThread::currentThreadId()) .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz")); if (m_edit) // 第一個參數是控件對象的指針,第二個是控件的方法名稱必須寫對否則不會成功,該函數還有其他多種重載形式 QMetaObject::invokeMethod(m_edit, "appendPlainText", Q_ARG(QString, str)); QThread::msleep(500); } }
在GUI所在線程,比如主窗口中創建並開啟線程,傳遞需要刷新的控件的指針
InvokeThread* thd = new InvokeThread(ui->plainTextEdit, this); thd->start();
測試效果如下:

