Qt子線程中通過QMetaObject::invokeMethod刷新UI控件


線程類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();

測試效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM