• 6921阅读
  • 8回复

[提问]Qt串口问题,请高手进来看看 [复制链接]

上一主题 下一主题
离线rookie_zh
 

只看楼主 倒序阅读 楼主  发表于: 2015-07-29
我用的是Qt自带的串口类,首先我定义了一个Serial类,继承QObject,在该类中实现串口的相关操作,然后在主界面类中将Serial和一个QThread声明为它的成员,在构造函数中使用Serial->moveToThread(readDataThread); 使得串口的读写操作在子线程执行, 读串口可以运行,写串口就出现Cannot create children for a parent that is in a different thread.  (Parent is QSerialPort(0x12e52b98), parent's thread is QThread(0x12e2d8c0), current thread is QThread(0x12e617b0)。 有哪位高手可以解决,万分感谢!!
离线rookie_zh

只看该作者 1楼 发表于: 2015-07-29
在线等啊。。。。
离线liulin188

只看该作者 2楼 发表于: 2015-07-29
楼主,串口通信,包括网络通信,Qt设计的原则是让你异步使用,可以参考我以前回复的帖子。。。
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线dbzhang800

只看该作者 3楼 发表于: 2015-07-29
回 rookie_zh 的帖子
rookie_zh:在线等啊。。。。 (2015-07-29 17:58) 

一般来说,是QThread使用错误造成的。比如说,你是不是在将QSerialPort moveToThread到QThread之后,仍然在当前线程下,直接调用了QSerialPort的成员函数。
离线rookie_zh

只看该作者 4楼 发表于: 2015-07-30
回 dbzhang800 的帖子
dbzhang800:一般来说,是QThread使用错误造成的。比如说,你是不是在将QSerialPort moveToThread到QThread之后,仍然在当前线程下,直接调用了QSerialPort的成员函数。 (2015-07-29 19:46) 

没有在当前线程中调用,
离线rookie_zh

只看该作者 5楼 发表于: 2015-07-30
已解决, 原因是子类化Qserialpotr的时候没有指明父对象
离线130啊斤

只看该作者 6楼 发表于: 2015-12-23
楼主,我也遇到了同样的问题,能详细的说一下么,没看懂解决问题的办法
离线realfan

只看该作者 7楼 发表于: 2015-12-23
回 rookie_zh 的帖子
rookie_zh:已解决, 原因是子类化Qserialpotr的时候没有指明父对象 (2015-07-30 17:05) 

指明父对象了,还能moveToThread吗?
离线johnyork

只看该作者 8楼 发表于: 2015-12-23
首先,Qt给出的提示信息已经告诉你调用QSerialPort的成员函数的线程并不是QSerialPort对象所在的线程,因此楼主有必要仔细检查发生错误的成员函数的调用位置,gdb单步跟踪应该不难找到。
其次,如果楼主实在无法避免在别的线程中操作串口的话,可以参考我的博客文章中给出的一个折衷方案(传送门 ),当然,代价是有点小麻烦
快速回复
限100 字节
 
上一个 下一个