Я получаю SIGSEGV в 'QScopedPointer', когда пытаюсь использовать указатель на QTcpSocket, если вместо этого я использую переменную, все работает нормально ...
Я создаю экземпляр 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 * между инициализацией и вызываемым слотом? Нужно ли делать что-то явное, чтобы сохранить это?
Спасибо!