Сигнал QTcpSocket::readyRead()
Всем привет.
Есть класс, в котором есть объект класса, работающий с QTcpSocket. Этот класс создается в main():
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); MController mc; mc.set_ip(ip); mc.set_password(password); mc.set_data_for_send(packet); mc.start(); return a.exec(); }
В методе start() создается объект для работы с сокетом, осуществляется соединение и при успешном коннекте в сокет отправляются нужные данные.
Но сигнал QTcpSocket::readyRead() не емитится и привязанный к нему слот не вызывается.
Посмотрел в Wireshark - данные уходят и приходит ответ.
Сам метод start() (выкинул то, что не имеет отношения к делу):
void MController::start() { constexpr uint16_t port = 2222; device_connector = std::make_unique<TCP_Connector>(ip_, port); device_connector->connect_to_device(); dynamic_cast<TCP_Connector*>(device_connector.get())->wait_ready_read(); }
В конец метода вставил
dynamic_cast<TCP_Connector*>(device_connector.get())->wait_ready_read();
в нем происходит:
tcp_->waitForReadyRead(4000);
После этого сигнал срабатывает один раз. по приему данных отправляю следующие данные, и ответа опять нет.
Думаю, что что-то связано с циклом обработки событий, но не пойму как сделать так, чтобы соединение создавалось после запуска этого цикла обработки событий.
Причем есть подобный код, но с графикой - там проблем нет. Но там коннект по кнопке осуществляется.
Как заставить работать нормально сигналы и слоты? Что-то затупил малость.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Akiv Doros
- 11 ноября 2024 г. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
- molni99
- 26 октября 2024 г. 1:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
- molni99
- 26 октября 2024 г. 1:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Да - пробовал еще QTimer создать, но он тоже не срабатывает.
"После этого сигнал срабатывает один раз" - один раз и должен был сработать до вызова обработчика событий;
"readyRead() не емитится и привязанный к нему слот не вызывается" - этого и не видно в представленном коде;
"этого и не видно в представленном коде;" - это внутренности MController. Во внутренностях этот коннект есть