#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
соответствующими именами классов.