Ruslan Polupan
Oct. 28, 2018, 6:43 p.m.

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

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

Do you like it? Share on social networks!

3
Evgenii Legotckoi
  • Oct. 28, 2018, 6:54 p.m.

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

Вот пример.

  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
    • Oct. 28, 2018, 7:19 p.m.

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

      Evgenii Legotckoi
      • Oct. 28, 2018, 7:26 p.m.

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

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



        Comments

        Only authorized users can post comments.
        Please, Log in or Sign up
        • Last comments
        • IscanderChe
          April 12, 2025, 5:12 p.m.
          Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
        • AK
          April 1, 2025, 11:41 a.m.
          Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
        • Evgenii Legotckoi
          March 9, 2025, 9:02 p.m.
          К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
        • VP
          March 9, 2025, 4:14 p.m.
          Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
        • ИМ
          Nov. 22, 2024, 9:51 p.m.
          Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…