Сигнал 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, 2: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. Во внутренностях этот коннект есть