2014-02-19 5 views
0

Может кто-нибудь помочь, как подключить сигнал и слот?Как отправить данные через сигнал и слот?

Я получил function1, которые получают в данных в реальном времени (одно значение)

void function1(int,double) 
{ 
    if(condition) 
    { 
    //some code 
    numb3 = 100;// double numb3 received new data 
    emit mySignal(numb3); 
    } 
} 

затем в другой функции у меня есть переменная, которая должна получать захваченные значение,

void function2(int,double) 
    { 

    double parameter2 = numb3; 
    } 

Я попытался комбинации, как

Q_SIGNAL double mySignal(double newValue=0){return newValue;}; 
Q_SLOT double slot1(double param=0) {emit mySignal(param); }; 

and then in function2{ 
connect(customPlot,SIGNAL(mySignal()), qApp, SLOT(slot1())); 
double parameter2 = slot1();} 

но они не работают, как я бы хотел.

Заранее благодарен!

+1

Посмотрите здесь: http://stackoverflow.com/questions/5842124/can-qt-signals-return-a-value –

+0

Пожалуйста, отметьте, какой ответ вам больше подходит – darkgaze

ответ

1

Вы должны определить свой сигнал, как это в заголовке.

Q_SIGNAL: 

void mySignal(int); 

Ваш слот будет выглядеть ниже в заголовочном файле.

Q_SLOT: 

void mySlot(int val); 

Теперь в файле cpp вы можете подключить сигнал к слоту, как показано ниже.

connect(signalObject, SIGNAL(mySignal(int)),slotObject,SLOT(mySlot(int))); 
+0

ok, но как действовать с одним параметром который должен быть отправлен между слотом сигнала и слотом? –

+0

@gen_next Я написал более полный ответ. – darkgaze

0

Вы смешиваете C + + 'return' и Qt signal/slot. Как правило, сигналы и слоты имеют возвратный тип void. Кроме того, тело сигнала генерируется MOC, поэтому вы обычно просто объявляете его.

Как это:

#include <QObject> 
#include <QDebug> 

class CustomPlot: QObject { 
    Q_OBJECT 

public: 
    void bla() { 
     emit doSomething(3.1415926535); 
    } 

signals: 
    void doSomething(double value); 
}; 

class EventHandler: QObject { 
    Q_OBJECT 

public slots: 
    void onDoSomething(double value) { 
     qDebug() << "we are called with value =" << value; 
    } 

}; 

//in main: 

CustomPlot plot; 
EventHandler handler; 

QObject::connect(&plot, &CustomPlot::doSomething, &handler, &EventHandler::onDoSomething); 

plot.bla(); // in QtCreator's 'Application Output' panel you'll see: 
      //we are called with value = 3.1415926535 
+0

Привет, спасибо, но в этом примере запускается первая функция bla(), которая запускает испускающий сигнал. Мне нужен в качестве результата слот, который был вызван функцией emit function + результат слота, должен быть одновременно назначен для двойного объекта .... –

+0

Извините, я вас не понял. Похоже, у вас всего 5 секунд, чтобы выразить все :). Я не понимаю, почему вы пытаетесь прочитать возврат слота. Слот обычно возвращается недействительным. И если это не так, как вы будете обрабатывать случай, когда к слоту подключено несколько слотов? Чья возвращаемая стоимость будет использоваться? –

+0

Еще раз: когда дело доходит до сигналов/слотов, возвращаемые значения почти всегда недействительны. Когда вы хотите «вернуть» некоторое значение, вы передаете это значение для сигнала, i. е. call 'emit signal_name (value_to_return)'. Таким образом, вы можете рассматривать сигналы как «инвертированные» методы, параметры которых фактически возвращают значения, которые передаются в подключенные слоты –

2

Определите свой собственный сигнал в заголовке класса, который излучает сигнал:

signals: 
     void signalName(paramType1,paramType2...); 

Определить свой слот для приема сигнала в классе, который получит его :

public slots: 
     void slotName(paramType1,paramType2...) ; // Should be THE SAME parameter types 

Теперь подключитесь внутри cpp, где вы хотите начать соединение обоих:

connect(classObjectWhereTheSignalIs, SIGNAL(signalName(paramType1,paramType2)),classObjectWhereTheSlotIs,SLOT(slotName(paramType1,paramType2))); 

И теперь вы излучать сигнал, как это, когда вы хотите:

emit (signalName(paramOfTypeParamType1, paramOfTypeParamType2...)); 

Приветствия.

Смежные вопросы