QT слоты и аргументы сигналов

#qt #qt-creator #signals-slots

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

Вопрос:

Я новичок в Qt и наткнулся на проблему, на которую не смог найти ответ в Google.

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

 setProperties(QString,double,double,bool)
  

Однако, как мне определить разницу между скоростью и ускорением в таком заявлении?

 connect(dialog, SIGNAL(setProperties(QString,double,double,bool)),
        this, SLOT(somerandomslot()));
  

randomslot необходимо получить поля скорости и ускорения и манипулировать ими, но в приведенном выше SIGNAL они просто double .

Ответ №1:

В этом случае ваша somerandomslot() функция, вероятно, должна иметь соответствующую сигнатуру функции, чтобы значения, emit указанные в вашем сигнале, могли быть переданы ей:

 void somerandomslot( const QString amp;foo, double a, double v, bool bar );
  

тогда ваш вызов connect будет выглядеть следующим образом:

 connect(dialog, SIGNAL(setProperties(QString,double,double,bool)), this, SLOT(somerandomslot(QString, double, double, bool)));
  

и когда ваш somerandomslot() будет вызван, у вас будет доступ к этим переменным.

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

1. Привет, Крис, спасибо за ответ, но как randomSlot отличает первый double от второго double? т.е. будет ли первый double из setProperties точно совпадать с первым double из somerandomslot? огромное спасибо

2. Они будут поступать в том же порядке, что и аргументы, переданные вашему сигналу при вызове emit. Точно так же, как любой вызов функции C .