QT使用多线程报错,QObject: Cannot create children for a parent that is in a different thread.

8 篇文章 1 订阅

看了几篇文章都没看懂
https://blog.csdn.net/qq_24890953/article/details/55880043
https://www.cnblogs.com/findumars/p/9361993.html

报错信息

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QSerialPort(0x32a5c10), parent’s thread is QThread(0x32902c0), current thread is QThread(0x18fe1a8)

没修改前的代码

//maindata.cpp
void mainData::initSerialPort()
{
    serialPort = new SerialThread;
    serialThread = new QThread(this);


    serialPort->moveToThread(serialThread);
    serialThread->start();

    connect(serialPort, &SerialThread::getcomPortList,this,&mainData::updateComPort);
    connect(this,&mainData::destroyed,this,&mainData::closeSerialThread);
    connect(serialPort, &SerialThread::receData, this, &mainData::handleReData);
}
SerialThread::SerialThread(QObject *parent) : QObject(parent)
{
    initSerial();
}
void SerialThread::initSerial()
{
    m_serial = new QSerialPort(this);//注意这里

    getPortNum();

//    connect(m_serial, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error), this, &SerialThread::handleSerialError);
    connect(m_serial, &QSerialPort::readyRead, this, &SerialThread::receiveData);
}

将上述的m_serial = new QSerialPort(this);改为
m_serial = new QSerialPort();即去掉this就没有这个错误了,原理不懂,谁能解释下。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
"QObject: Cannot create children for a parent that is in a different thread" 是一个错误消息,它表示在不同线程中无法为父对象创建子对象。这个错误通常发生在Qt框架的应用程序中,当你尝试在一个线程中创建一个子对象,并将它的父对象设置为另一个线程中的对象时。 这个错误的原因是Qt框架使用了线程安全的机制来确保对象的正确访问。每个对象都有一个与之相关联的线程,当你在一个线程中创建一个对象时,这个对象的父对象必须与它在同一个线程中。否则,就会出现上述错误。 为了解决这个问题,你可以考虑以下几种方法: 1. 确保在同一个线程中创建父对象和子对象。这意味着你需要在同一个线程中创建所有相关的对象。 2. 如果你确实需要在不同线程中创建对象,可以使用信号和槽机制将父对象和子对象进行连接。这样可以确保子对象的创建是在正确的线程中进行的。 3. 可能还有其他的解决方案,具体取决于你的应用程序的架构和需求。你可以查阅Qt框架的文档或者在Qt社区寻求帮助以获取更多的解决方案。 总之,"QObject: Cannot create children for a parent that is in a different thread" 错误通常是由在不同线程中创建父对象和子对象引起的。通过确保在相同的线程中创建相关对象,或者使用信号和槽机制进行连接,你可以解决这个错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [QObject: Cannot create children for a parent that is in a different thread错误](https://blog.csdn.net/lzjsqn/article/details/56287267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值