Ruslan Polupan
28 октября 2018 г. 18:43

Послать подряд один и тот же сигнал с разными параметрами

signal, Slot


Связь сигналов и слотов:

  1. connect(fuelPage,&FuelPage::sendInfo,this,&RecoveryWizard::slotGetPageData);
  2. connect(fuelPage,&FuelPage::signalSendCheckData,this,&RecoveryWizard::slotSetLostCheckData);

Пытаюсь послать дважды один и тот же сигнал с разными параметрами.

  1. void FuelPage::sendDataTo()
  2. {
  3. emit sendInfo(2,field("shiftID").toString());
  4. emit signalSendCheckData("SHIFT_ID", field("shiftID").toInt());
  5.  
  6. emit sendInfo(3,field("posID").toString());
  7. emit signalSendCheckData("POS_ID",field("posID").toInt());
  8. }

Получается, что обрабатывается только последний вызываемый сигнал.

Я что-то не так делаю, или не моя схема передачи данных между объектами не верна,


2

Вам это нравится? Поделитесь в социальных сетях!

3
Evgenii Legotckoi
  • 28 октября 2018 г. 18:54

Да нет. Тут не в подключении дело, если действительно обрабатывается только последний вызов.

Вот пример.

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3.  
  4. #include <QDebug>
  5.  
  6. Widget::Widget(QWidget *parent) :
  7. QWidget(parent),
  8. ui(new Ui::Widget)
  9. {
  10. ui->setupUi(this);
  11. connect(ui->pushButton, &QPushButton::clicked, this, &Widget::onPushButtonClicked);
  12. connect(this, &Widget::signal_1, this, &Widget::on_signal_1);
  13. connect(this, &Widget::signal_2, this, &Widget::on_signal_2);
  14. }
  15.  
  16. Widget::~Widget()
  17. {
  18. delete ui;
  19. }
  20.  
  21. void Widget::onPushButtonClicked()
  22. {
  23. emit signal_1(1);
  24. emit signal_2(2);
  25.  
  26. emit signal_1(3);
  27. emit signal_2(4);
  28. }
  29.  
  30. void Widget::on_signal_1(int arg1)
  31. {
  32. qDebug() << "on_signal_1" << arg1;
  33. }
  34.  
  35. void Widget::on_signal_2(int arg1)
  36. {
  37. qDebug() << "on_signal_2" << arg1;
  38. }

А вот вывод в консоль

  1. on_signal_1 1
  2. on_signal_2 2
  3. on_signal_1 3
  4. on_signal_2 4

Киньте в слоты вывод qDebug(), может вам показалось, что происходит только один вызов, а на самом деле так кажется из-за какой-то другой логики в программе, что там что-то неправильно перезаписывается, или за что там отвечают ваши сигналы и слоты.


    Ruslan Polupan
    • 28 октября 2018 г. 19:19

    Если комментирую последние две строки. то данные по сигналу из первых двух передаются.

      Evgenii Legotckoi
      • 28 октября 2018 г. 19:26

      У вас там нет никакой асинхронной логики? Использование потоков например? Просто должно работать.

      Во-первых объединить логику слотов в один слот, а вторых написать слот, который будет принимать вектор структур данных, со всеми вам необходимыми параметрами. А потом в цикле выполнять все необходимые действия. Если уж вы подряд вызываете данные сигналы.



        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        • Последние комментарии
        • Evgenii Legotckoi
          16 апреля 2025 г. 17:08
          Благодарю за отзыв. И вам желаю всяческих успехов!
        • IscanderChe
          12 апреля 2025 г. 17:12
          Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
        • AK
          1 апреля 2025 г. 11:41
          Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
        • Evgenii Legotckoi
          9 марта 2025 г. 21:02
          К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
        • VP
          9 марта 2025 г. 16:14
          Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…