• 7903阅读
  • 3回复

QT次线程中使用QTcpSocket [复制链接]

上一主题 下一主题
离线fire_ball
 

只看楼主 倒序阅读 楼主  发表于: 2010-11-24
最近写通讯程序,遇到一问题
代码如下
class Thread_1 : public QThread
{
    Q_OBJECT

public:
    Thread_1(QObject *parent = 0);
protected:
    void run();

private:
    QTcpSocket* m_tcpSocket;
};
Thread_1::Thread_1(QObject *parent)
    : QThread(parent)
{
    //m_tcpSocket = new QTcpSocket();
}
void Thread_1::run()
{
    m_tcpSocket = new QTcpSocket();
    m_tcpSocket->connectToHost(QHostAddress::LocalHost , 502);
    exec();
}
如果m_tcpSocket在构造函数中声明就会报错
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTcpSocket(0x1a19fd0), parent's thread is QThread(0x1527688), current thread is Thread_1(0x26fc10)
如果在run()中声明可以正常运行。
另外C++ GUI QT4中所说,在次线程中使用QT的类,第一个约束条件就是QObject的子对象必须在他的父对象线程中创建这句话怎么理解?
离线e1212dison

只看该作者 1楼 发表于: 2010-11-24
离线fire_ball

只看该作者 2楼 发表于: 2010-11-25
楼上说的方法我也试过,也有同样的问题。
具体什么原因还不清楚,我尝试调用QTcpSocket的objectName()函数,不会出现报错。
离线lf541512

只看该作者 3楼 发表于: 2010-12-01
m_tcpSocket跨线程了,QThread在run时才新建线程。具体怎么回事不清楚,只是知道不能这样传参数
快速回复
限100 字节
 
上一个 下一个