使用指针时的QTcpSocket,SIGSEGV

时间:2011-03-23 18:19:11

标签: c++ qt pointers qtcpsocket

当我尝试使用指向QTcpSocket的指针时,我在'QScopedPointer'中获得了一个SIGSEGV,如果我使用变量,那么一切正常......

我将QTcpSocket实例化为指针并连接'readyRead()'信号,如下所示:

AlphaNetworkComm::AlphaNetworkComm(QWidget *parent) : QMainWindow(parent) {
    ui.setupUi(this);

    sock = new QTcpSocket(this); // QTcpSocket * sock; is declared in the .h
    connect(sock,SIGNAL(readyRead()), this, SLOT(socketDataAvailable()));
    sock->connectToHost("10.10.50.147",2101);
    if (sock->waitForConnected(2000)==false) {
        qDebug("Connection failed!");
    } else {
        qDebug("Connection successful!");

        QByteArray data;
        QDataStream out(&data, QIODevice::WriteOnly);
        out.setVersion(QDataStream::Qt_4_1);
        out << qint8(0x02) << qint8(0x00) << qint8(0x48) 
            << qint8(0x01) << qint8(0x49) << qint8(0x15) 
            << qint8(0x12);
        sock->write(data);
    }
}

该代码运行无错误。但是,当调用'socketDataAvailable()'插槽时:

void AlphaNetworkComm::socketDataAvailable() {
    QByteArray rxData;
    rxData = sock->readAll();
    qDebug(QString("Rx: [%1]").arg(bytes2String(rxData)).toStdString().c_str());
}

应用程序SIGSEGV位于QScopedPointer中。如果我摆脱指针并只使用变量,一切正常。我错过了一些明显的东西吗Qt是否在初始化和被调用的插槽之间删除了我的QTcpSocket *?我是否需要做一些明确的事情来保留它?

谢谢!

0 个答案:

没有答案