如何通过信号和插槽发送数据?

时间:2014-02-19 23:02:38

标签: c++ qt

有人可以帮助您如何连接信号和插槽吗?

我有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();}

但他们没有按我的意愿工作。

提前致谢!

3 个答案:

答案 0 :(得分:3)

在发出信号的类的标题中定义自定义信号:

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...));

干杯。

答案 1 :(得分:1)

你应该在标题中定义你的信号。

Q_SIGNAL:

void mySignal(int);

您的广告位在标题文件中如下所示。

Q_SLOT:

void mySlot(int val);

现在在cpp文件中,您可以将信号连接到插槽,如下所示。

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

答案 2 :(得分: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