Qt SIGNAL-SIGNAL соединение по-новому - PullRequest
0 голосов
/ 11 июня 2019

Я использую старый синтаксис соединения до сих пор. Сегодня я хочу изменить свой проект на новый синтаксис подключения, например:

#include <QDebug>

class Telefon : public QObject {
  Q_OBJECT
  public:
    void letRing() {
      qDebug() << "letRing";
      emit ring();
    }

  signals:
    void ring();
  public slots:
    void onRing() {
      qDebug() << "onRing";
    }
};

class Cable : public QObject {
  Q_OBJECT
  signals:
    void ring();
};

int main(int argc, char *argv[])
{
  Telefon *fon1 = new Telefon();
  Telefon *fon2 = new Telefon();
  Cable *cable = new Cable();

  // old connection way
  // connect(fon1,  SIGNAL(ring()), cable, SIGNAL(ring()));
  // connect(cable, SIGNAL(ring()), fon2,  SLOT(onRing()));

  // new connection way
  QObject::connect(fon1,  &Telefon::ring, cable, &Cable::ring);    // <-- This is the problem
  QObject::connect(cable, &Cable::ring,   fon2,  &Telefon::onRing);

  fon1->letRing();

  return 0;
}

Компиляция прошла без ошибок. Но телефон никогда не звонит: (

Вывод должен быть:

letRing
onRing

Но это:

letRing

Я покопался в коде Qt и обнаружил, что соединения SIGNAL-SLOT действительны, но соединения SIGNAL-SIGNAL не работают таким образом. Кроме того, он не генерирует ошибки при компиляции. Есть ли способ соединить СИГНАЛЫ новым способом / синтаксисом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...