QT中, 不同线程中初始化的对象只能在该线程中使用,而不能在其他线程中使用。
就是说如果在继承QThread 类的重载run函数里访问在构造函数里初始化的变量(继承QObject).就会报这个错误.如下:
Test::Test(QThread *parent)
:QThread(parent)
{
sock = new QUdpSocket();
}
Test::run()
{
sock->read();
}
因为Test类是由主线程初始化的,所以sock变量也是由主线程初始化的,则run函数是子线程,访问主线程的sock就会出错.
下面代码就正常,因为sock是由子线程初始化,只在子线程里访问.
Test::Test(QThread *parent)
:QThread(parent)
{
}
Test::run()
{
QUdpSocket *sock = new QUdpSocket();
sock->read();
}