Сигнальные слоты Qt c не работают должным образом

#c #qt #signals-slots

#c #qt #сигналы-слоты

Вопрос:

Мой код ведет себя странно:

Я хочу установить соединение сигнал-слот. Когда у меня нет никаких параметров, все работает нормально. Но когда я использую параметры, даже такие простые, как int, мое соединение не работает. Кто-нибудь имеет представление о том, почему это может быть?

Спасибо.

Это работает:

 Chart.h       
  void signalForUI();

Chart.cpp
    emit signalForUI();

Userinterface.h   
    public slots:
      void UI_schreibtWas();

 Userinterface.cpp   

     connect(  ui.Diagram  , SIGNAL( signalForUI()  ),
               this  ,SLOT (UI_schreibtWas()))  ;
  ...

       void UserInterface::UI_schreibtWas()
       {  qDebug() << "ich schreibe was- ohne ";    }
  

Это не:

 Chart.h       
  void signalForUI(const int amp;X_send);

Chart.cpp
    emit signalForUI(5);        

Userinterface.h   
    public slots:
      void UI_schreibtWas(const int amp;X_send);

 Userinterface.cpp   

     connect(  ui.Diagram  , SIGNAL( signalForUI(const int amp;X_send)  ),
               this  ,SLOT (UI_schreibtWas(const int amp;X_send)))  ;
  ...

      void UserInterface::UI_schreibtWas(const int amp;X_send)
      {  qDebug() << "ich schreibe was  - int ";    }
  

Комментарии:

1. Избавьтесь от X_send в вашем соединении. Просто используйте типы параметров.

2. Поэтому превратите connect( ui.Diagram , SIGNAL( signalForUI(const int amp;X_send) ), this ,SLOT (UI_schreibtWas(const int amp;X_send))) в connect( ui.Diagram , SIGNAL( signalForUI(const int amp;) ), this ,SLOT (UI_schreibtWas(const int amp;))) ;

Ответ №1:

Вы не должны передавать имена параметров в определения сигналов / слотов для connect .

 connect(ui.Diagram, SIGNAL(signalForUI(const intamp;)),
        this, SLOT(UI_schreibtWas(const intamp;)));
  

Но вы должны использовать синтаксис Qt 5 для connect, который не использует макросы и позволяет вам отлавливать такие ошибки во время компиляции:

 connect(ui.Diagram, amp;DiagramClass::signalForUI, this, amp;ThisClass::UI_schreibtWas)
  

Замените DiagramClass и ThisClass соответствующими именами классов.