_
Шілде 5, 2020, 11:50 Т.Ж.

Не работают слоты/сигналы

C++, Qt

Помогите разобраться.

  1. MainWindow::on_push_autorisation_clicked() - при нажатии на кнопку отправляется сигнал. В слоте выводим текст и отправляем сигнал дальше. Если не отправлять сигнал все ок работает. Не блочиться гуи и выводится текст. Но если отправить сигнал (раскомментировать) - ничего не выводиться и гуи блокируется, но сигнал вроде как проходит.
  1. signals:
  2. void send_input_data(const std::string&, const std::string&, int);
  3.  
  4. private slots:
  5. void on_push_autorisation_clicked();
  6.  
  7. void MainWindow::on_push_autorisation_clicked()
  8. {
  9. ui->text_output->append(QString("clicked"));
  10. auto logon = ui->logon->text();
  11. auto psw = ui->password->text();
  12. auto room = ui->room_id->text();
  13. ui->text_output->append(QString("send signal"));
  14.  
  15. //emit send_input_data(logon.toStdString(), psw.toStdString(), room.toUInt());
  16. }
  1. connnect работает только если код ниже в одном потоке. как только раскомментирую - не работает. в чем может быть причины?
  1. QObject::connect(&client, SIGNAL(send_text(const std::string&, const std::string&)),
  2. this, SLOT(text_from_client(const std::string&, const std::string&)));
  3. io_service.run();
  4. //std::thread th([&io_service]() { io_service.run(); });
  5. //th.join();
3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

2
nayk1982
  • Шілде 6, 2020, 3:13 Т.Қ.
  • (өңделген)

Во-первых, у Вас в сигнале 3 параметра, а в коннекте 2.
Во-вторых, Вы используете устаревший способ connect, поэтому и ошибки не возникает про третий параметр - при этом способе нет проверки.
https://wiki.qt.io/New_Signal_Slot_Syntax/ru

    Алексей Внуков
    • Шілде 6, 2020, 7:16 Т.Қ.
    • (өңделген)

    и посмотрите работу с потоками в Qt, там подробно описано как передавать данные с одного в потока в другой при помощи сигналов и слотов

      Пікірлер

      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
      Кіріңіз немесе Тіркеліңіз