当我尝试使用指向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 *?我是否需要做一些明确的事情来保留它?
谢谢!