Qt信号与槽的第5个参数Qt :: Queued Connection

信号与槽第5个参数如果是Qt :: Queued Connection,就代表这个槽函数放到事件队列中,等待主线程空闲处理事件队列,也就是说槽函数会延迟处理
但是如果我们的这个槽函数所属的类没有在子线程中的话,那么主线程会一直等待这个对应的槽函数执行,会导致ui卡死
比如这样

点击查看代码
void Logger::write_Message(const QString &message)
{
    QString timeMessage;
    {
        QMutexLocker locker(&this->m_mutex);
        QString NowTime = QDateTime::currentDateTime().toString("HH:mm:ss.zzz");
        timeMessage = QString("[%1],[%2]").arg(NowTime).arg(message);
    }
    emit logMessage(timeMessage);
}
//在其他类中
connect(&Logger::instance(),&Logger::logMessage,this,[](const QString&message)
            {
        qDebug()<<message;
    },Qt :: Queued Connection);
这个代码中只有一个主线程,用了Qt :: Queued Connection会卡死,所以必须把日志类放入子线程

posted on 2026-07-23 23:11  dd_l  阅读(1)  评论(0)    收藏  举报