QT 之 编译错误总结(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaoyuaiweide/article/details/77185539

1.'Thread' does not name a type

错误在于:头文件互相包含


2. QTcpSocket不能跨线程访问
比如说我在子线程的构造函数对其成员QTcpSocket进行了实例化,然后在其run()函数中进行操作;
运行时一般会出现如下信息:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNativeSocketEngine(0xadc00df0), parent*s thread is QThread(0x81c0298), current thread is QThread(0x806e000)

如果在构造函数中实例化了QTcpSocket,则该对象将属于调用该子线程的对象而非子线程本身;
解决: 不要在构造函数中实例化,而是在子线程的run()函数中实例化并操作,这样才属于子线程本身。


3.不能跨线程调用Q_OBJECT

运行时出现如下信息:
QSocketNotifier: socket notifiers cannot be enabled from another thread.
原因在于不能跨线程调用Q_OBJECT,只要使用了信号槽机制就不能跨线程访问
注意QT中界面线程是主线程,其他创建的QThread,只要使用了Q_OBJECT,就不能跨线程访问。

这里延伸出一个问题:
如果不使用Qt的信号槽机制,能跨线程访问吗?当然是可以的。
QTcpSocket步行,原因在于QTcpSocket本身就使用了信号槽机制。




4.错误:QApplication: Object event filter cannot be in a different thread.

不要在子线程中处理UI,官网警告过





猜你喜欢

转载自blog.csdn.net/zhaoyuaiweide/article/details/77185539
今日推荐